package pe.com.hermes.hermetic.modelo.daoimpl;

import com.ibatis.sqlmap.client.SqlMapClient;

import pe.com.hermes.hermetic.beans.AnomaliaBean;
import pe.com.hermes.hermetic.beans.BillRecBean;
import pe.com.hermes.hermetic.beans.BillRecoDetBean;
import pe.com.hermes.hermetic.beans.CSDenominacionBean;
import pe.com.hermes.hermetic.beans.ComprobanteServicioBean;
import pe.com.hermes.hermetic.beans.CuentaClienteBean;
import pe.com.hermes.hermetic.beans.FaltSobrBean;
import pe.com.hermes.hermetic.beans.PuntoBean;
import pe.com.hermes.hermetic.beans.ReporteMovDiarioBean;
import pe.com.hermes.hermetic.beans.ResultadoAperturaBean;
import pe.com.hermes.hermetic.beans.RutaServicioBean;
import pe.com.hermes.hermetic.modelo.dao.AbonosDAO;
import pe.com.hermes.hermetic.modelo.dao.CServicioDAO;
import pe.com.hermes.hermetic.modelo.dao.ClienteDAO;
import pe.com.hermes.hermetic.modelo.dao.CuentaDAO;
import pe.com.hermes.hermetic.modelo.dao.PuntoDAO;
import pe.com.hermes.hermetic.modelo.dao.TiposDAO;
import pe.com.hermes.hermetic.negocio.ultil.CadenaUtil;

import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;

import pe.com.hermes.hermetic.negocio.ultil.Util;

import java.math.BigDecimal;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;

import java.util.Map;


import javax.sql.DataSource;

import oracle.jdbc.OracleTypes;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import pe.com.hermes.hermetic.beans.OperRealBean;
import pe.com.hermes.hermetic.beans.OperRealResuBean;
import pe.com.hermes.hermetic.beans.OperacionesAtmBean;
import pe.com.hermes.hermetic.beans.RepoMontosCustodiaBean;
import pe.com.hermes.unidadesnegocio.operaciones.entities.CompServAtmEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.CompServOperEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.PedidoDetaEntity;

@Repository("cServicioDAO")
public class CServicioDAOImpl implements CServicioDAO {
    @Autowired
    private SqlMapClient sqlMapClient;
    @Autowired
    protected JdbcTemplate jdbcTemplate;
  @Autowired
    private CuentaDAO cuentaDAO;
  @Autowired
    private ClienteDAO clienteDAO;
  @Autowired
    private PuntoDAO puntoDAO;
  @Autowired
    private TiposDAO tiposDAO;
  @Autowired
    private AbonosDAO abonosDAO;
    
    private Logger logger = Logger.getLogger(this.getClass());

  /** Metodo Desfasado NSC 21-08-09
    public ComprobanteServicioBean getCS(String numero, String serie, 
                                         String codcliente, String sucursal) {
        String SQL = 
            "select a.tip_docu_cmpb||'-'||a.cod_seri_cmpb||'-'||to_char(a.num_cmpb) numero, " + 
            "         a.tip_docu_cmpb,a.cod_seri_cmpb,a.num_cmpb numero_cmpb,a.cod_bove, a.cod_clie_cnta, a.cod_cnta, a.cod_punt_orig, " + 
            "         a.cod_punt_dest, a.can_totl_enva, to_char(a.mon_efec,'999,999,999,990.00') mon_efec, b.tip_reme, " + 
            "         to_char(a.fec_proc_aper,'dd/mm/yyyy') fec_proc_aper, a.tip_unid_mone " + 
            "         from tv_cmpb_serv a, bt_remesa b " + 
            "         where a.num_cmpb = ? and " + 
            "         a.cod_seri_cmpb = ? and " + 
            "         a.tip_docu_cmpb = 'CS'  and " + 
            "         a.num_cmpb = b.num_cmpb and        " + 
            "         a.cod_seri_cmpb = b.cod_seri_cmpb and " + 
            "         a.tip_docu_cmpb = b.tip_docu_cmpb and " + 
            "         a.cod_clie_cnta = ? ";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = new Object[] { numero, serie, codcliente };
        return (ComprobanteServicioBean)this.jdbcTemplate.queryForObject(SQL, 
                                                                         params, 
                                                                         new ComprobanteServicioMapper(sucursal));

    } **/

    /** NUEVO NSC 21-08-09 **/
     public List getCS(final String numero, final String serie, 
                                          final String codcliente, final String sucursal) {

          final List listCompServ = new ArrayList();
          logger.info("Obtener saldos reales por cuenta.");
          String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_COMP_SERV(?,?,?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
          CallableStatementCallback cs = new CallableStatementCallback() {
          public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
          SQLException {
              arg0.setString(1, numero);
              arg0.setString(2, serie);
              arg0.setString(3, codcliente);
              arg0.registerOutParameter(4, OracleTypes.CURSOR);            
              arg0.registerOutParameter(5, OracleTypes.NUMERIC);
              arg0.registerOutParameter(6, OracleTypes.VARCHAR);
              arg0.execute();
              logger.error(arg0.getString(4));
              ResultSet rs = (ResultSet)arg0.getObject(4);
              while(rs.next()){
                    ComprobanteServicioBean comser = new ComprobanteServicioBean();
                    comser.setNumeroCompleto(rs.getString(1));
                    comser.setTipoDoc(rs.getString(2));
                    comser.setSerie(rs.getString(3));
                    comser.setNumero(rs.getString(4));
                    comser.setBoveda(rs.getString(15));
                    comser.setCliente(rs.getString(16));
                    comser.setCuenta(rs.getString(17));                                                          
                    comser.setPuntoOrigen(rs.getString(18));    
                    comser.setPuntoDestino(rs.getString(19));
                    comser.setCantidad(rs.getString(10));
                    comser.setTotal(rs.getString(11));
                    comser.setTipoRem(rs.getString(20));
                    comser.setFecha(rs.getString(13));
                    comser.setTipoUnidad(rs.getString(14));
                    comser.setCodBove(rs.getString(5));
                    listCompServ.add(comser);
               }
               return listCompServ;
          }
       };
       this.jdbcTemplate.execute(SQL, cs);
       return listCompServ;
     } 
    /*
    public ComprobanteServicioBean getCS(final String numero, final String serie, 
                                         final String codcliente, final String sucursal) {

         logger.info("Obtener saldos reales por cuenta.");
         String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_COMP_SERV(?,?,?,?,?,?) }";
         final ComprobanteServicioBean comser = new ComprobanteServicioBean();
         CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
         CallableStatementCallback cs = new CallableStatementCallback() {
         public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
         SQLException {
             arg0.setString(1, numero);
             arg0.setString(2, serie);
             arg0.setString(3, codcliente);
             arg0.registerOutParameter(4, OracleTypes.CURSOR);            
             arg0.registerOutParameter(5, OracleTypes.NUMERIC);
             arg0.registerOutParameter(6, OracleTypes.VARCHAR);
             arg0.execute();
             logger.error(arg0.getString(4));
             ResultSet rs = (ResultSet)arg0.getObject(4);
             while(rs.next()){
                   comser.setNumeroCompleto(rs.getString(1));
                   comser.setTipoDoc(rs.getString(2));
                   comser.setSerie(rs.getString(3));
                   comser.setNumero(rs.getString(4));
                   comser.setBoveda(rs.getString(15));
                   comser.setCliente(rs.getString(16));
                   comser.setCuenta(rs.getString(17));                                                          
                   comser.setPuntoOrigen(rs.getString(18));    
                   comser.setPuntoDestino(rs.getString(19));
                   comser.setCantidad(rs.getString(10));
                   comser.setTotal(rs.getString(11));
                   comser.setTipoRem(rs.getString(20));
                   comser.setFecha(rs.getString(13));
                   comser.setTipoUnidad(rs.getString(14));
              }
              return comser;
         }
      };
      this.jdbcTemplate.execute(SQL, cs);
      return comser;
    } 
    */
    public void setCuentaDAO(CuentaDAO cuentaDAO) {
        this.cuentaDAO = cuentaDAO;
    }

    public void setClienteDAO(ClienteDAO clienteDAO) {
        this.clienteDAO = clienteDAO;
    }

    public void setPuntoDAO(PuntoDAO puntoDAO) {
        this.puntoDAO = puntoDAO;
    }

    public void setTiposDAO(TiposDAO tiposDAO) {
        this.tiposDAO = tiposDAO;
    }
  /** Metodo Desfasado NSC 21-08-09
   
    protected class ComprobanteServicioMapper implements RowMapper {
        public String sucursal;

        public ComprobanteServicioMapper(String sucursal) {
            this.sucursal = sucursal;
        }

        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad ClienteBean
            ComprobanteServicioBean cs = new ComprobanteServicioBean();
            cs.setNumeroCompleto(rs.getString(1));
            cs.setTipoDoc(rs.getString(2));
            cs.setSerie(rs.getString(3));
            cs.setNumero(rs.getString(4));
            cs.setBoveda(cuentaDAO.getDesBoveda(sucursal, rs.getString(5)));
            cs.setCliente(clienteDAO.getDescripcion(rs.getString(6)));
            cs.setCuenta(cuentaDAO.getDescripcion(sucursal, rs.getString(6), 
                                                  rs.getString(7)));
            PuntoBean puntoO = puntoDAO.getPunto(rs.getString(8));
            if (puntoO != null)
                cs.setPuntoOrigen(puntoO.getDesPunto());
            PuntoBean puntoD = puntoDAO.getPunto(rs.getString(9));
            if (puntoD != null)
                cs.setPuntoDestino(puntoD.getDesPunto());
            cs.setCantidad(rs.getString(10));
            cs.setTotal(rs.getString(11));
            cs.setTipoRem(tiposDAO.getDescripcion("62", rs.getString(12)));
            cs.setFecha(rs.getString(13));
            cs.setTipoUnidad(rs.getString(14));
            return cs;
        }
    }
 **/
    public List getBilletesMonedas(String numero, String serie, 
                                   String tipoUnidad, String tipo) {
        String SQL = 
            "select b.tip_mone,to_char(a.mon_deno,'999,999,999,990.00') mon_deno," + 
            " a.can_piez,to_char(b.can_valo_nomi,'999,999,999,990.00') can_valo_nomi from ac_cmpb_deno a," + 
            " ac_deno_mone b " + " where " + " a.num_cmpb = ? and " + 
            " a.cod_seri_cmpb = ? and " + " a.tip_docu_cmpb = 'CS' and " + 
            " a.tip_mone = b.tip_mone and " + " a.cod_Deno = b.cod_deno and " + 
            " b.tip_unid_mone = ? and " + " b.tip_mone = ? " + 
            " order by b.can_valo_nomi desc";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { numero, serie, tipoUnidad, tipo };
        //Ejecutar el query
        return jdbcTemplate.query(SQL, params, new BilletesMonedasDenMapper());
    }
    public List getBilletesMonedas(String numero, String serie, 
                                   String tipoUnidad, String tipo, String codBove, String cs) {
        String SQL = 
            "select b.tip_mone,to_char(a.mon_deno,'999,999,999,990.00') mon_deno," + 
            " a.can_piez,to_char(b.can_valo_nomi,'999,999,999,990.00') can_valo_nomi from ac_cmpb_deno a," + 
            " ac_deno_mone b, ac_boveda c " + " where " + " a.num_cmpb = ? and " + 
            " a.cod_seri_cmpb = ? and " + " a.tip_docu_cmpb = 'CS' and " + 
            " a.tip_mone = b.tip_mone and " + " a.cod_Deno = b.cod_deno and " + 
            " c.cod_sucu_htb = a.cod_sucu_htb and c.cod_bove = a.cod_bove and"+
            " c.tip_unid_mone = b.tip_unid_mone and " + " b.tip_mone = ? and a.cod_bove = ? " + 
            " order by b.can_valo_nomi desc";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { numero, serie, tipo , codBove};
        //Ejecutar el query
        return jdbcTemplate.query(SQL, params, new BilletesMonedasDenMapper());
    }

    public List getFaltantesSobrantesPorPunto(final String cliente,final String sucursal, 
                                      final String cuenta,final String boveda, 
                                      final String fec_desde,final String fec_hasta) {
        logger.info("Obteniendo lista de faltantes y sobrantes");
        String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_FALT_SOBR_PUNT(?,?,?,?,? ,?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final List listFaltSobr = new LinkedList();
        CallableStatementCallback cs = new CallableStatementCallback() {
        public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
        SQLException {
            arg0.setString("P_COD_CLIE", cliente);
            arg0.setString("P_COD_SUCU_HTB", sucursal);
            arg0.setString("P_COD_CNTA", cuenta);
            arg0.setString("P_COD_BOVE", boveda);
            arg0.setString("P_FEC_DSDE", fec_desde);
            arg0.setString("P_FEC_HSTA", fec_hasta);
            arg0.registerOutParameter("S_LIST", OracleTypes.CURSOR);
            arg0.registerOutParameter("S_ERRO", OracleTypes.NUMERIC);            
            arg0.registerOutParameter("S_MENS", OracleTypes.VARCHAR);
            arg0.execute();
            logger.info(arg0.getString("S_MENS"));
            if(arg0.getInt("S_ERRO") == ConstantesHermetic.RESULT_SP_OK)
                {
                ResultSet rs = (ResultSet)arg0.getObject("S_LIST");
                while(rs.next()){
                        FaltSobrBean faltSobrBean= new FaltSobrBean();
                        faltSobrBean.setCodPunto(rs.getString("codPunto"));
                        faltSobrBean.setCodSeriCmpb(rs.getString("codSeriCmpb"));
                        faltSobrBean.setDesBoveda(rs.getString("desBoveda"));
                        faltSobrBean.setDesCuenta(rs.getString("desCuenta"));
                        faltSobrBean.setDesPunto(rs.getString("desPunto"));
                        faltSobrBean.setFecProcAper(rs.getString("fecProcAper"));
                        faltSobrBean.setMonApertura(Util.getDoubleFormatted(rs.getDouble("monApertura")));
                        faltSobrBean.setMonDiferencia(Util.getDoubleFormatted(rs.getDouble("monDiferencia")));
                        faltSobrBean.setMonEfec(Util.getDoubleFormatted(rs.getDouble("monEfec")));
                        faltSobrBean.setNomClie(rs.getString("nomClie"));
                        faltSobrBean.setNumCmpb(rs.getString("numCmpb"));
                        listFaltSobr.add(faltSobrBean);
                    }
                    return listFaltSobr;
                }
            else{
                throw new SQLException("Ocurrio un error al obtener la lista");
            }
        }
        };
        this.jdbcTemplate.execute(SQL, cs);
        return listFaltSobr;
    }

    public List getFaltantesSobrantesPorAgen(final String cliente,final String sucursal, 
                                      final String cuenta,final String boveda, 
                                      final String fec_desde,final String fec_hasta) {
        logger.info("Obteniendo lista de faltantes y sobrantes");
        String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_FALT_SOBR_AGEN(?,?,?,?,? ,?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final List listFaltSobr = new LinkedList();
        CallableStatementCallback cs = new CallableStatementCallback() {
        public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
        SQLException {
            arg0.setString("P_COD_CLIE", cliente);
            arg0.setString("P_COD_SUCU_HTB", sucursal);
            arg0.setString("P_COD_CNTA", cuenta);
            arg0.setString("P_COD_BOVE", boveda);
            arg0.setString("P_FEC_DSDE", fec_desde);
            arg0.setString("P_FEC_HSTA", fec_hasta);
            arg0.registerOutParameter("S_LIST", OracleTypes.CURSOR);
            arg0.registerOutParameter("S_ERRO", OracleTypes.NUMERIC);            
            arg0.registerOutParameter("S_MENS", OracleTypes.VARCHAR);
            arg0.execute();
            logger.info(arg0.getString("S_MENS"));
            if(arg0.getInt("S_ERRO") == ConstantesHermetic.RESULT_SP_OK)
                {
                ResultSet rs = (ResultSet)arg0.getObject("S_LIST");
                while(rs.next()){
                        FaltSobrBean faltSobrBean= new FaltSobrBean();
                        faltSobrBean.setCodPunto(rs.getString("codPunto"));
                        faltSobrBean.setCodSeriCmpb(rs.getString("codSeriCmpb"));
                        faltSobrBean.setDesBoveda(rs.getString("desBoveda"));
                        faltSobrBean.setDesCuenta(rs.getString("desCuenta"));
                        faltSobrBean.setDesPunto(rs.getString("desPunto"));
                        faltSobrBean.setFecProcAper(rs.getString("fecProcAper"));
                        faltSobrBean.setMonApertura(Util.getDoubleFormatted(rs.getDouble("monApertura")));
                        faltSobrBean.setMonDiferencia(Util.getDoubleFormatted(rs.getDouble("monDiferencia")));
                        faltSobrBean.setMonEfec(Util.getDoubleFormatted(rs.getDouble("monEfec")));
                        faltSobrBean.setNomClie(rs.getString("nomClie"));
                        faltSobrBean.setNumCmpb(rs.getString("numCmpb"));
                        listFaltSobr.add(faltSobrBean);
                    }
                    return listFaltSobr;
                }
            else{
                throw new SQLException("Ocurrio un error al obtener la lista");
            }
        }
        };
        this.jdbcTemplate.execute(SQL, cs);
        return listFaltSobr;
    }
    
    public List getBilletesRecontados(final String cliente,final String sucursal, 
                                      final String cuenta,final String boveda, 
                                      final String punto,final String tipOrig, 
                                      final String tipRemi,final String billetaje, 
                                      final String fechadesde,final String fechahasta, 
                                      final String tipoReporte) throws SQLException{
            logger.info("Obteniendo lista de faltantes y sobrantes");
            String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_BILL_RECO(?,?,?,?,? ,?,?,?,?,? ,?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            final List listBillRecon = new LinkedList();
            CallableStatementCallback cs = new CallableStatementCallback() {
            public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
            SQLException {
                arg0.setString("P_COD_CLIE", cliente);
                arg0.setString("P_COD_SUCU_HTB", sucursal);
                arg0.setString("P_COD_CNTA", cuenta);
                arg0.setString("P_COD_BOVE", boveda);
                arg0.setString("P_COD_PUNT", punto);
                arg0.setString("P_TIP_ORIG", tipOrig);
                arg0.setString("P_TIP_REMI", tipRemi);
                arg0.setString("P_BILL", billetaje);
                arg0.setString("P_FEC_DSDE", fechadesde);
                arg0.setString("P_FEC_HSTA", fechahasta);
                arg0.registerOutParameter("S_QUERY", OracleTypes.VARCHAR);
                arg0.registerOutParameter("S_LIST", OracleTypes.CURSOR);
                arg0.registerOutParameter("S_ERRO", OracleTypes.NUMERIC);            
                arg0.registerOutParameter("S_MENS", OracleTypes.VARCHAR);
                arg0.execute();
                //logger.info(arg0.getString("S_QUERY"));
                logger.info(arg0.getString("S_MENS"));
                if(arg0.getInt("S_ERRO") == ConstantesHermetic.RESULT_SP_OK&&!tipoReporte.equals("3"))
                    {
                    ResultSet rs = (ResultSet)arg0.getObject("S_LIST");
                    if(tipoReporte.equals("1")){
                        while(rs.next()){
                                BillRecBean billRecBean= new BillRecBean();
                                billRecBean.setDesCnta(rs.getString("des_cnta"));
                                billRecBean.setDesBove(rs.getString("des_bove"));
                                billRecBean.setCodClie(rs.getString("cod_clie_cnta"));
                                billRecBean.setNomClie(rs.getString("cliente"));
                                billRecBean.setCodPuntGeneral(rs.getString("cod_punt_orig"));
                                billRecBean.setDesPuntGeneral(rs.getString("origen"));
                                billRecBean.setNumCmpb(rs.getString("remito"));
                                billRecBean.setFecProcAper(rs.getString("fecha"));
                                billRecBean.setDesTipMone(rs.getString("tipo"));
                                billRecBean.setCanValoNomi(rs.getString("deno"));
                                billRecBean.setCanValoNomiDouble(rs.getDouble("deno"));
                                billRecBean.setMonDeno(Util.getDoubleFormatted(rs.getDouble("monto")));
                                billRecBean.setMonDenoDouble((rs.getDouble("monto")));
                                billRecBean.setPiezas(rs.getString("piezas"));
                                billRecBean.setPiezasDouble(rs.getDouble("piezas"));
                                billRecBean.setLadrillos(rs.getString("ladrillos"));
                                billRecBean.setLadrillosDouble(rs.getDouble("ladrillos"));
                                /*billRecBean.setListDetalle(getDetalleBilletesRecontados(cliente, sucursal, 
                                          cuenta, boveda, 
                                          billRecBean.getCodPuntGeneral(), tipOrig, 
                                          tipRemi, billetaje, 
                                          fechadesde, fechahasta));*/
                                listBillRecon.add(billRecBean);
                            }
                            return listBillRecon;
                    }
                    else if(tipoReporte.equals("2")){
                        while(rs.next()){
                                BillRecBean billRecBean= new BillRecBean();
                                billRecBean.setDesCnta(rs.getString("des_cnta"));
                                billRecBean.setDesBove(rs.getString("des_bove"));
                                billRecBean.setCodClie(rs.getString("cod_clie_cnta"));
                                billRecBean.setNomClie(rs.getString("cliente"));
                                billRecBean.setCodPuntGeneral(rs.getString("cod_punt_orig"));
                                billRecBean.setDesPuntGeneral(rs.getString("origen"));
                                billRecBean.setNumCmpb(rs.getString("remito"));
                                billRecBean.setFecProcAper(rs.getString("fecha"));
                                billRecBean.setDesTipMone(rs.getString("tipo"));
                                billRecBean.setCanValoNomi(rs.getString("deno"));
                                billRecBean.setMonDeno(Util.getDoubleFormatted(rs.getDouble("monto")));
                                billRecBean.setPiezas(rs.getString("piezas"));
                                billRecBean.setLadrillos(rs.getString("ladrillos"));
                                //adicionales
                                billRecBean.setMonDenoDouble((rs.getDouble("monto")));
                                billRecBean.setPiezasDouble(rs.getDouble("piezas"));
                                billRecBean.setLadrillosDouble(rs.getDouble("ladrillos"));
                                billRecBean.setCanValoNomiDouble(rs.getDouble("deno"));
                                /*billRecBean.setListDetalle(getDetalleBilletesRecontados(cliente, sucursal, 
                                          cuenta, boveda, 
                                          billRecBean.getCodPuntGeneral(), tipOrig, 
                                          tipRemi, billetaje, 
                                          fechadesde, fechahasta));*/
                                listBillRecon.add(billRecBean);
                            }
                            return listBillRecon;
                    }
                    else if(tipoReporte.equals("3")){
                        return null;
                    }
                    }
                if(tipoReporte.equals("3"))
                    return null;
                else{
                    throw new SQLException("Ocurrio un error al obtener la lista");
                }
            }
            };
            this.jdbcTemplate.execute(SQL, cs);
            return listBillRecon;
            }
    private ArrayList getDetalleBilletesRecontados(final String cliente,final String sucursal, 
                                      final String cuenta,final String boveda, 
                                      final String punto,final String tipOrig, 
                                      final String tipRemi,final String billetaje, 
                                      final String fechadesde,final String fechahasta) throws SQLException{
                                      
                                      
            logger.info("Obteniendo lista de faltantes y sobrantes");
            String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_BILL_RECO_SUBA(?,?,?,?,? ,?,?,?,?,? ,?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            final ArrayList<BillRecoDetBean> listDetBillRecon = new ArrayList<BillRecoDetBean>();
            CallableStatementCallback cs = new CallableStatementCallback() {
            public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
            SQLException {
                arg0.setString("P_COD_CLIE", cliente);
                arg0.setString("P_COD_SUCU_HTB", sucursal);
                arg0.setString("P_COD_CNTA", cuenta);
                arg0.setString("P_COD_BOVE", boveda);
                arg0.setString("P_COD_PUNT", punto);
                arg0.setString("P_TIP_ORIG", tipOrig);
                arg0.setString("P_TIP_REMI", tipRemi);
                arg0.setString("P_BILL", billetaje);
                arg0.setString("P_FEC_DSDE", fechadesde);
                arg0.setString("P_FEC_HSTA", fechahasta);
                arg0.registerOutParameter("S_QUERY", OracleTypes.VARCHAR);
                arg0.registerOutParameter("S_LIST", OracleTypes.CURSOR);
                arg0.registerOutParameter("S_ERRO", OracleTypes.NUMERIC);            
                arg0.registerOutParameter("S_MENS", OracleTypes.VARCHAR);
                arg0.execute();
                //logger.info(arg0.getString("S_QUERY"));
                logger.info(arg0.getString("S_MENS"));
                if(arg0.getInt("S_ERRO") == ConstantesHermetic.RESULT_SP_OK)
                    {
                    ResultSet rs = (ResultSet)arg0.getObject("S_LIST");
                    while(rs.next()){
                            BillRecoDetBean billRecoDetBean = new BillRecoDetBean();
                            billRecoDetBean.setDesTipMone(rs.getString("tipo"));
                            billRecoDetBean.setCanValoNomi(rs.getString("deno"));
                            billRecoDetBean.setMonDeno(Util.getDoubleFormatted(rs.getDouble("monto")));
                            billRecoDetBean.setMonDeno(Util.getDoubleFormatted(rs.getDouble("monto")));
                            billRecoDetBean.setPiezas(rs.getString("piezas"));
                            billRecoDetBean.setLadrillos(rs.getString("ladrillos"));
                            listDetBillRecon.add(billRecoDetBean);
                        }
                        return listDetBillRecon;
                    }
                else{
                    throw new SQLException("Ocurrio un error al obtener la lista");
                }
            }
            };
            this.jdbcTemplate.execute(SQL, cs);
            return listDetBillRecon;
            }
    public ArrayList getConsolidadoBilletesRecontados(final String cliente,final String sucursal, 
                                      final String cuenta,final String boveda, 
                                      final String punto,final String tipOrig, 
                                      final String tipRemi,final String billetaje, 
                                      final String fechadesde,final String fechahasta) throws SQLException{
                                      
                                      
            logger.info("Obteniendo lista de faltantes y sobrantes");
            String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_BILL_RECO_SUBB(?,?,?,?,? ,?,?,?,?,? ,?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            final ArrayList<BillRecoDetBean> listDetBillRecon = new ArrayList<BillRecoDetBean>();            
            CallableStatementCallback cs = new CallableStatementCallback() {            
            public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
            SQLException {
                arg0.setString("P_COD_CLIE", cliente);
                arg0.setString("P_COD_SUCU_HTB", sucursal);
                arg0.setString("P_COD_CNTA", cuenta);
                arg0.setString("P_COD_BOVE", boveda);
                arg0.setString("P_COD_PUNT", punto);
                arg0.setString("P_TIP_ORIG", tipOrig);
                arg0.setString("P_TIP_REMI", tipRemi);
                arg0.setString("P_BILL", billetaje);
                arg0.setString("P_FEC_DSDE", fechadesde);
                arg0.setString("P_FEC_HSTA", fechahasta);
                arg0.registerOutParameter("S_QUERY", OracleTypes.VARCHAR);
                arg0.registerOutParameter("S_LIST", OracleTypes.CURSOR);
                arg0.registerOutParameter("S_ERRO", OracleTypes.NUMERIC);            
                arg0.registerOutParameter("S_MENS", OracleTypes.VARCHAR);
                arg0.execute();
                //logger.info(arg0.getString("S_QUERY"));
                logger.info(arg0.getString("S_MENS"));
                if(arg0.getInt("S_ERRO") == ConstantesHermetic.RESULT_SP_OK)
                    {
                    ResultSet rs = (ResultSet)arg0.getObject("S_LIST");
                    while(rs.next()){
                            BillRecoDetBean billRecoDetBean = new BillRecoDetBean();
                            billRecoDetBean.setCodClieCnta(rs.getString("cod_clie_cnta"));
                            billRecoDetBean.setDesTipMone(rs.getString("tipo"));
                            billRecoDetBean.setCanValoNomi(rs.getString("deno"));
                            billRecoDetBean.setMonDeno(Util.getDoubleFormatted(rs.getDouble("monto")));
                            billRecoDetBean.setMonDeno(Util.getDoubleFormatted(rs.getDouble("monto")));
                            billRecoDetBean.setPiezas(rs.getString("piezas"));
                            billRecoDetBean.setLadrillos(rs.getString("ladrillos"));
                            listDetBillRecon.add(billRecoDetBean);
                        }
                        return listDetBillRecon;
                    }
                else{
                    throw new SQLException("Ocurrio un error al obtener la lista");
                }
            }
            };
            this.jdbcTemplate.execute(SQL, cs);
            return listDetBillRecon;
            }
    /*JRA*/
    public List getDetalleAperturaSobreMultiple(String cliente, 
                                                String sucursal, 
                                                String listCodCuenta, 
                                                String listCodModulo, 
                                                String serie, String numero, 
                                                String fechaDesde, 
                                                String fechaHasta, 
                                                String chkAnom, 
                                                String listCodPunto) {
        List listDetApertSobr = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        try{
            map.put("P_COD_CLIE",cliente);
            map.put("P_COD_SUCU",sucursal);
            map.put("P_LIST_COD_CNTA",listCodCuenta);
            map.put("P_LIST_COD_BOVE",listCodModulo);
            map.put("P_COD_SERI_CMPB",serie);
            map.put("P_NUM_CMPB",numero);
            map.put("P_FEC_DESD",fechaDesde);
            map.put("P_FEC_HAST",fechaHasta);
            map.put("P_IND_ANOM",chkAnom);
            map.put("P_LIST_COD_PUNT",listCodPunto);
            sqlMapClient.queryForObject("getDetApertSobreMult",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro==0)
                listDetApertSobr = (List)map.get("S_LIST");
            else
                throw new Error(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
            listDetApertSobr = new ArrayList();
        }
        return listDetApertSobr;
    }

public List getListDetalleIngresos(String tipoFecha, String fechaDesde,
                                       String fechaHasta, String codCliente,
                                       String listCodPunto,
                                       String listCodBanco, String uniMond,
                                       String estado) {
        Map map = new HashMap();
        map.put("P_FEC_TIPO",tipoFecha);
        map.put("P_FEC_INI",fechaDesde);
        map.put("P_FEC_FIN",fechaHasta);
        map.put("P_COD_CLIE",codCliente);
        map.put("P_LIST_COD_PUNT",listCodPunto);
        map.put("P_LIST_COD_BAN",listCodBanco);
        map.put("P_COD_UM",uniMond);
        map.put("P_COD_ESTADO",estado);
        List listDetalleIngresos = new ArrayList();
        try{
            sqlMapClient.queryForObject("getListDetalleIngresos",map);
            listDetalleIngresos = (List)map.get("S_LIST");
        }catch(Exception e){
            logger.error(e);
        }
        return listDetalleIngresos;
    }

    public List getListIngresosSalidas(String codCliente,
                                                                String uniMond,
                                                                String listCodPunto,
                                                                String listCodBanco,
                                                                String movimiento,
                                                                String fechaDesde,
                                                                String fechaHasta) {
          Map map = new HashMap();
          map.put("P_COD_CLIE",codCliente);
          map.put("P_COD_UM",uniMond);
          map.put("P_LIST_COD_PUNT",listCodPunto);
          map.put("P_LIST_COD_BAN",listCodBanco);
          map.put("P_TIP_MOV",movimiento);
          map.put("P_FEC_INI",fechaDesde);
          map.put("P_FEC_FIN",fechaHasta);
          List listIngresosSalidas = new ArrayList();
          try{
              sqlMapClient.queryForObject("getListIngresosSalidas",map);
              listIngresosSalidas = (List)map.get("S_LIST");
          }catch(Exception e){
              logger.error(e);
          }
          return listIngresosSalidas;
    }

    public List getListDetalleIngresos(String listCodCliente,
                                       String listCodSucusal,
                                       String listCodPunto,
                                       String codDestino,
                                       String listCodBanco,
                                       String listCodCuenta,
                                       String codOpe,
                                       String uniMond,
                                       String estado,
                                       String tipoFecha,
                                       String fechaInicio,
                                       String fechaFin) {
      logger.info("metodo : getListDetalleIngresos");  
      Map map = new HashMap();
      logger.info("listCodCliente :"+listCodCliente);
      logger.info("listCodSucusal :"+listCodSucusal);
      logger.info("listCodPunto :"+listCodPunto);
      logger.info("codDestino :"+codDestino);
      logger.info("listCodBanco :"+listCodBanco);
      logger.info("listCodCuenta :"+listCodCuenta);
      logger.info("codOpe :"+codOpe);
      logger.info("uniMond :"+uniMond);
      logger.info("estado :"+estado);
      logger.info("tipoFecha :"+tipoFecha);
      logger.info("fechaInicio :"+fechaInicio);
      logger.info("fechaFin :"+fechaFin);
      
      
      map.put("P_LIST_COD_CLIE",listCodCliente);
      map.put("P_LIST_COD_SUCU",listCodSucusal);
      map.put("P_LIST_COD_PUNT",listCodPunto);
      map.put("P_COD_DEST",codDestino);
      map.put("P_LIST_COD_BAN",listCodBanco);
      map.put("P_LIST_COD_CUE",listCodCuenta);
      map.put("P_COD_OPE",codOpe);
      map.put("P_COD_UM",uniMond);
      map.put("P_COD_ESTADO",estado);
      map.put("P_FEC_TIPO",tipoFecha);
      map.put("P_FEC_INI",fechaInicio);
      map.put("P_FEC_FIN",fechaFin);

      
      List listDetalleIngresos = new ArrayList();
      try{
          sqlMapClient.queryForObject("getListDetalleIngresosNew",map);
          listDetalleIngresos = (List)map.get("S_LIST");
      }catch(Exception e){
          logger.error(e);
      }
      return listDetalleIngresos; 

    }

    public List getListAbonosRealizados(String listCodClie, String listCodSucu,
                                        String listCodPunt, String listCodBand,
                                        String uniMond, String fechaIncio,
                                        String fechaHasta) {
      logger.info("metodo : getListAbonosRealizados");  
      Map map = new HashMap();
      
      logger.info("listCodClie :"+listCodClie);
      logger.info("listCodSucu :"+listCodSucu);
      logger.info("listCodPunt :"+listCodPunt);
      logger.info("listCodBand :"+listCodBand);
      logger.info("uniMond :"+uniMond);
      logger.info("fechaIncio :"+fechaIncio);
      logger.info("fechaHasta :"+fechaHasta);
      
      map.put("P_LIST_COD_CLIE",listCodClie);
      map.put("P_LIST_COD_SUCU",listCodSucu);
      map.put("P_LIST_COD_PUNT",listCodPunt);
      map.put("P_LIST_COD_BAN",listCodBand);
      map.put("P_COD_UM",uniMond);
      map.put("P_FEC_INI",fechaIncio);
      map.put("P_FEC_FIN",fechaHasta);
      List listAbonosRealizados = new ArrayList();
      try{
          sqlMapClient.queryForObject("getListAbonosRealizados",map);
          listAbonosRealizados = (List)map.get("S_LIST");
      }catch(Exception e){
          logger.error(e);
      }
      return listAbonosRealizados;   
    }

    protected class BilletesMonedasDenMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad ClienteBean
            CSDenominacionBean csd = new CSDenominacionBean();
            csd.setTipoMoneda(rs.getString(1));
            csd.setMonto(rs.getString(2));
            csd.setPiezas(rs.getString(3));
            csd.setValorNominal(rs.getString(4));
            return csd;
        }
    }

    public String diceContener(String numero, String serie) {
        String SQL = 
            "Select to_char(mon_efec,'999,999,999,999.00') mon_efec from tv_cmpb_serv " + 
            " Where  num_cmpb = ? " + " and    cod_seri_cmpb = ? " + 
            " and    tip_docu_cmpb = 'CS' ";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { numero, serie };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "0.00";
        }
    }
    /** Metodo Desfasado NSC 25-08-09
    public String contiene(String numero, String serie, String unidad) {
        String SQL = 
            "Select nvl(sum(a.mon_deno),0) mon_deno " + " from   ac_cmpb_deno a, ac_deno_mone b " + 
            " where  a.num_cmpb = ?" + " and    a.cod_seri_cmpb = ? " + 
            " and    a.tip_docu_cmpb = 'CS' " + 
            " and    a.tip_mone = b.tip_mone " + 
            " and    a.cod_Deno = b.cod_deno " + " and    b.tip_unid_mone = ?";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { numero, serie, unidad };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "0.00";
        }
    } **/
    /** NUEVO NSC 25-08-09 **/
     public String contiene(final String numero, final String serie, final String unidad) {
    
          logger.info("Obtener al columna contiene de CS");
          String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_RETU_MONT_CONT(?,?,?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
          final StringBuffer contiene = new StringBuffer();
          CallableStatementCallback cs = new CallableStatementCallback() {
          public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
          SQLException {
              arg0.setString(1, numero);
              arg0.setString(2, serie);
              arg0.setString(3, unidad);
              arg0.registerOutParameter(4, OracleTypes.NUMERIC);
              arg0.registerOutParameter(5, OracleTypes.NUMERIC);            
              arg0.registerOutParameter(6, OracleTypes.VARCHAR);
              arg0.execute();
              logger.error(arg0.getString(6));
              contiene.append(arg0.getString(4));
              return contiene.toString();
          }
       };
       this.jdbcTemplate.execute(SQL, cs);
         return contiene.toString();
     } 
    public String contiene(final String numero, final String serie, final String unidad, final String codBove) {
    
         logger.info("Obtener al columna contiene de CS");
         String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_RETU_MONT_CONT_BOVE(?,?,?,?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
         final StringBuffer contiene = new StringBuffer();
         CallableStatementCallback cs = new CallableStatementCallback() {
         public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
         SQLException {
             arg0.setString(1, numero);
             arg0.setString(2, serie);
             arg0.setString(3, unidad);
             arg0.setString(4,codBove);
             arg0.registerOutParameter(5, OracleTypes.NUMERIC);
             arg0.registerOutParameter(6, OracleTypes.NUMERIC);            
             arg0.registerOutParameter(7, OracleTypes.VARCHAR);
             arg0.execute();
             logger.error(arg0.getString(7));
             contiene.append(arg0.getString(5));
             return contiene.toString();
         }
      };
      this.jdbcTemplate.execute(SQL, cs);
        return contiene.toString();
    } 

     
    public String anomalias(String numero, String serie) {
        String SQL = 
            "Select to_char(mon_dife,'999,999,999,999.00') mon_dife from ac_acta " + 
            " Where  num_cmpb = ? " + " and    cod_seri_cmpb = ? " + 
            " and    tip_docu_cmpb = 'CS' ";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { numero, serie };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "0.00";
        }
    }

    public List getDetalleAno(String numero, String serie) {
        String SQL = 
            "Select to_char(b.hor_hall_dife,'hh24:mi') hor_hall_dife,b.num_cint," + 
            " c.des_tipo,b.txt_obsv,to_char(b.mon_anom,'999,999,999,990.00') mon_anom, " + 
            " a.tip_docu_acta, a.cod_seri_acta, a.num_acta," + 
            " b.nse_item_acta" + 
            " from ac_acta a, ac_acta_deta b, tg_tabl_tipo c where " + 
            " a.num_cmpb = ? and a.cod_seri_cmpb = ? and " + 
            " a.tip_docu_cmpb = 'CS' and a.num_acta = b.num_acta and " + 
            " a.cod_seri_acta = b.cod_seri_acta and " + 
            " a.tip_docu_acta = b.tip_docu_acta and " + 
            " b.cod_Anom = c.cod_tipo and c.cod_grup_tipo = 67";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { numero, serie };
        //Ejecutar el query
        return jdbcTemplate.query(SQL, params, new DetalleAnomMapper());
    }
    public List getDetalleAno(String numero, String serie, String codBove) {
        String SQL = 
            "Select to_char(b.hor_hall_dife,'hh24:mi') hor_hall_dife,b.num_cint," + 
            " c.des_tipo,b.txt_obsv,to_char(b.mon_anom,'999,999,999,990.00') mon_anom, " + 
            " a.tip_docu_acta, a.cod_seri_acta, a.num_acta," + 
            " b.nse_item_acta" + 
            " from ac_acta a, ac_acta_deta b, tg_tabl_tipo c where " + 
            " a.num_cmpb = ? and a.cod_seri_cmpb = ? and " + 
            " a.tip_docu_cmpb = 'CS' and a.num_acta = b.num_acta and " + 
            " a.cod_seri_acta = b.cod_seri_acta and " + 
            " a.tip_docu_acta = b.tip_docu_acta and " + 
            " b.cod_bove = ? and " + 
            " b.cod_Anom = c.cod_tipo and c.cod_grup_tipo = 67";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { numero, serie , codBove};
        //Ejecutar el query
        return jdbcTemplate.query(SQL, params, new DetalleAnomMapper());
    }
    protected class DetalleAnomMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad ClienteBean
            AnomaliaBean anomalia = new AnomaliaBean();
            anomalia.setHora(rs.getString(1));
            anomalia.setCinta(rs.getString(2));
            anomalia.setDesTipo(rs.getString(3));
            anomalia.setObs(rs.getString(4));
            anomalia.setMonto(rs.getString(5));
            anomalia.setTipDocuActa(rs.getString(6));
            anomalia.setCodSeriActa(rs.getString(7));
            anomalia.setNumActa(rs.getString(8));
            anomalia.setNseItemActa(rs.getString(9));
            return anomalia;
        }
    }

   /** Metodo Desfasado NSC 08-09-09 
    public List getIngresosSalidasGral(String fechaDesde, String fechaHasta, 
                                       String cliente, String cuenta, 
                                       String boveda, String sucursal) {
        String SQL = 
            " select cod_seri_cmpb, num_cmpb, to_char(nvl(mon_efec,0),'999,999,999,990.00') mon_efec,tip_form_tras," + 
            " decode(tip_form_tras,'2','INGRESO','SALIDA') tip_form_tras2, cod_punt_orig," + 
            " cod_punt_dest, nvl(can_totl_enva,0) can_totl_enva, nvl(est_recu,'0') est_recu, tip_orig," + 
            " tip_dest, nvl(tip_ingr,0) tip_ingr, to_char(fec_proc_aper,'dd/mm/yyyy') fec_proc_aper, nvl(mon_efec,0)" + 
            " from tv_cmpb_serv a " + 
            " where fec_proc_aper >= to_date(?,'dd/mm/yyyy') " + 
            " and fec_proc_aper <= to_date(?,'dd/mm/yyyy') and" + 
            " cod_clie_cnta +0 = ? and" + " cod_cnta =  ? " + 
            " and cod_bove = ? " + " and cod_sucu_htb_cnta = ?" + 
            " and ((tip_orig='1' and tip_dest='3' and tip_form_tras='2') or" + 
            " (tip_orig='2' and tip_dest='1' and tip_form_tras='1') or" + 
            " (tip_orig='2' and tip_dest='3' and tip_form_tras='2') or" + 
            " (tip_orig='2' and tip_dest='3' and tip_form_tras='1')) " + 
            " and est_docu<>'11' and" + 
            " ((nvl(tip_ingr,0) = 1 and nvl(mon_efec,0) != 0 ) or " + 
            " (nvl(tip_ingr,0) = 2 and nvl(mon_efec,0) != 0 ) or nvl(tip_ingr,0) = 0 )" + 
            " order by fec_proc_aper, tip_form_tras,cod_seri_cmpb,num_cmpb";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = 
            new Object[] { fechaDesde, fechaHasta, cliente, cuenta, boveda, 
                           sucursal };
        //Ejecutar el query
        return jdbcTemplate.query(SQL, params, new IngresosSalidasMapper());
    } **/

 /** Metodo Desfasado NSC 08-09-09
    protected class IngresosSalidasMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad ClienteBean
            DecimalFormatSymbols dfs = new DecimalFormatSymbols();
            dfs.setDecimalSeparator('.');
            dfs.setGroupingSeparator(',');
            DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
            df1.setGroupingSize(3);

            ComprobanteServicioBean cs = new ComprobanteServicioBean();
            cs.setSerie(rs.getString(1));
            cs.setNumero(rs.getString(2));
            cs.setTotal(rs.getString(14));
            cs.setTipoRem(rs.getString(4));
            cs.setPuntoOrigen(rs.getString(5));
            cs.setPuntoDestino(rs.getString(7));
            cs.setCantidad(rs.getString(8));
            cs.setEnvases(rs.getString(8));
            cs.setTipoOrigen(rs.getString(10));
            cs.setTipoDestino(rs.getString(11));
            cs.setTipoIngreso(rs.getString(12));
            cs.setFecha("'" + rs.getString(13));
            PuntoBean punto = null;
            String valor = null;
            if (rs.getString("tip_form_tras").equals("2")) {
                cs.setEstado(tiposDAO.getEstado(rs.getString(9)));
                punto = puntoDAO.getPunto(rs.getString(6));
                if (rs.getInt("est_recu") >= 2) {
                    valor = montoDeno(rs.getString(2), rs.getString(1));
                } else {
                    valor = rs.getString(14);
                }

            } else {
                punto = puntoDAO.getPunto(rs.getString(7));
                valor = rs.getString(14);
            }
            if (punto != null) {
                cs.setDesAgent(punto.getCodEquiAgen() + "-" + 
                               punto.getDesEquiAgen());
                cs.setDesPunto(punto.getCodPunto() + "-" + 
                               punto.getDesPunto());
            }
            cs.setValor(valor);
            cs.setValor2(df1.format(Double.parseDouble(valor)));
            return cs;
        }
    } **/
    
  /** Metodo Desfasado NSC 08-09-09 **/
  /**
  public List getIngresosSalidasGral(final String fechaDesde, final String fechaHasta, 
                                     final String cliente, final String cuenta, 
                                     final String boveda, final String sucursal) {

     logger.info("Obtener ingresos y salidas general");
     String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_INSA_GENE(?,?,?,?,?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
     final List listadenom = new ArrayList();
     CallableStatementCallback cas = new CallableStatementCallback() {
     public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
     SQLException {
         arg0.setString(1, sucursal);
         arg0.setString(2, cliente);
         arg0.setString(3, cuenta);
         arg0.setString(4, boveda);
         arg0.setString(5, fechaDesde);
         arg0.setString(6, fechaHasta);
         arg0.registerOutParameter(7, OracleTypes.CURSOR);
         arg0.registerOutParameter(8, OracleTypes.NUMERIC);            
         arg0.registerOutParameter(9, OracleTypes.VARCHAR);
         arg0.execute();
         logger.error(arg0.getString(9));
         ResultSet rs = (ResultSet)arg0.getObject(7);
         
         DecimalFormatSymbols dfs = new DecimalFormatSymbols();
         dfs.setDecimalSeparator('.');
         dfs.setGroupingSeparator(',');
         DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
         df1.setGroupingSize(3);
         
         while(rs.next()){
              ComprobanteServicioBean cs = new ComprobanteServicioBean();
              cs.setFecha("'" + rs.getString("FECHA"));
              cs.setSerie(rs.getString("SERIE"));
              cs.setNumero(rs.getString("CS"));
              cs.setDesPunto(rs.getString("punto"));
              cs.setEnvases(rs.getString("ENVASES"));
              cs.setPuntoOrigen(rs.getString("tipo"));
              cs.setValor(rs.getString("MONTO"));
              cs.setValor2(df1.format(Double.parseDouble(rs.getString("MONTO"))));
              cs.setEstado(rs.getString("estado"));
              cs.setTipoOrigen(rs.getString("tip_orig"));
              cs.setTipoDestino(rs.getString("tip_dest"));
              cs.setTipoRem(rs.getString("tip_form_tras"));              
              listadenom.add(cs);                               
          }
          return listadenom;
     }
  };
  this.jdbcTemplate.execute(SQL, cas);
  return listadenom;
  }
  **/
  /**Nuevo metodo REQ1487- CU019- J.Rivera 03/05/2011***/
   public List getIngresosSalidasGral(String sucursales, String clientes, 
                                       String cuentas, String bovedas, 
                                       String tipoUnidMone, String tipoFormTras,
                                       String tipoClie,String clieBanc,
                                       String fechaDesde,String fechaHasta,
                                       String tipoOperacion) throws Exception{

       List listIngSalGral = new ArrayList();
       Map map = new HashMap();
       int erro = 0;
       map.put("P_COD_SUCU",sucursales);
       map.put("P_COD_CLIE",clientes);
       map.put("P_COD_CNTA",cuentas);
       map.put("P_COD_BOVE",bovedas);
       map.put("P_TIP_UNID_MONE",tipoUnidMone);
       map.put("P_TIP_FORM_TRAS",tipoFormTras);
       map.put("P_TIP_CLIE",tipoClie);
       map.put("P_CLIE_BANC",clieBanc);
       map.put("P_FEC_DESD",fechaDesde);
       map.put("P_FEC_HAST",fechaHasta);
       
       if (ConstantesHermetic.TIPO_OPERACION_AGENCIA.equals(tipoOperacion)){
           try{
               sqlMapClient.queryForObject("getIngSalGralAgencia",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   listIngSalGral = (List)map.get("S_LIST");
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error en Reporte de Ing/Sal Gral AGENCIAS",e);
               listIngSalGral = new ArrayList();
           }    
       }
       if (ConstantesHermetic.TIPO_OPERACION_CLIENTE.equals(tipoOperacion)){
              try{
                  sqlMapClient.queryForObject("getIngSalGralCliente",map);
                  erro = (Integer)map.get("S_ERRO");
                  if(erro==0)
                      listIngSalGral = (List)map.get("S_LIST");
                  else
                      throw new Error(map.get("S_MENS").toString());
              }catch(Exception e){
                  logger.error("Error en Reporte de Ing/Sal Gral CLIENTE",e);
                  listIngSalGral = new ArrayList();
              }    
       }
       if (ConstantesHermetic.TIPO_OPERACION_ATM.equals(tipoOperacion)){
            try{
                sqlMapClient.queryForObject("getIngSalGralATM",map);
                erro = (Integer)map.get("S_ERRO");
                if(erro==0)
                    listIngSalGral = (List)map.get("S_LIST");
                else
                    throw new Error(map.get("S_MENS").toString());
            }catch(Exception e){
                logger.error("Error en Reporte de Ing/Sal Gral ATM",e);
                listIngSalGral = new ArrayList();
            } 
       }
       if (ConstantesHermetic.TIPO_OPERACION_TRANSFERENCIA.equals(tipoOperacion)){
            try{
                sqlMapClient.queryForObject("getIngSalGralTransf",map);
                erro = (Integer)map.get("S_ERRO");
                if(erro==0)
                    listIngSalGral = (List)map.get("S_LIST");
                else
                    throw new Error(map.get("S_MENS").toString());
            }catch(Exception e){
                logger.error("Error en Reporte de Ing/Sal Gral TRANSFERENCIA",e);
                listIngSalGral = new ArrayList();
            } 
       }
       if (ConstantesHermetic.TIPO_OPERACION_TODOS.equals(tipoOperacion)){
             try{
                 sqlMapClient.queryForObject("getIngSalGralTodos",map);
                 erro = (Integer)map.get("S_ERRO");
                 if(erro==0)
                     listIngSalGral = (List)map.get("S_LIST");
                 else
                     throw new Error(map.get("S_MENS").toString());
             }catch(Exception e){
                 logger.error("Error en Reporte de Ing/Sal Gral TODOS",e);
                 listIngSalGral = new ArrayList();
             } 
       }
           
       return listIngSalGral;
   }
   
    public String montoDeno(String numero, String serie) {
        String SQL = 
            "select nvl(sum(mon_deno),0) mon_deno from ac_cmpb_deno where" + 
            " num_cmpb = ? and  cod_seri_cmpb = ? and  tip_docu_cmpb = 'CS'";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { numero, serie };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "0.00";
        }
    }
    
    /** Metodo Desfasado JCR 2010/12/16
    public String montoDeno(String numero, String serie, String boveda) {
        String SQL = 
            "select nvl(sum(mon_deno),0) mon_deno from ac_cmpb_deno where" + 
            " num_cmpb = ? and  cod_seri_cmpb = ? and  tip_docu_cmpb = 'CS' and cod_bove = ?";
            CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { numero, serie, boveda };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "0.00";
        }
    }
    ***/
        
    public String montoDeno(final String numero, final String serie, final String boveda) {
        String SQL = 
            "{ call APERTURA.HWPG_COMP_SERV.HWPR_RETU_MONT_DENO(?,?,?,?,?, ?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final StringBuffer resultado = new StringBuffer();
        this.jdbcTemplate.execute(SQL, new CallableStatementCallback() {
                    public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
                                                                                       SQLException {
                        String salida = null;                        
                        arg0.setString(1, numero);                                                
                        arg0.setString(2, serie);
                        arg0.setString(3, boveda);                        
                        arg0.registerOutParameter(4, OracleTypes.VARCHAR);
                        arg0.registerOutParameter(5, OracleTypes.NUMBER);
                        arg0.registerOutParameter(6, OracleTypes.VARCHAR);
                        arg0.execute();
                        String montoDeno = arg0.getString(4).replaceAll(",",".");
                        String codError = arg0.getString(5);
                        String mensajeError = arg0.getString(6);                        
                        logger.info("respuesta de Ejecucion: " + new StringBuffer(codError).append(mensajeError).toString());
                        
                        if (codError!=null && codError.equals(String.valueOf(ConstantesHermetic.RESULT_SP_OK))){
                            //resultado correcto
                             resultado.append(montoDeno);
                                                                                
                        }else{
                            //resultado con errores                           
                            logger.error("Error de Ejecucion: " + new StringBuffer(codError).append(mensajeError).toString());                    
                            throw new SQLException(mensajeError);
                        }    
                        return resultado.toString();
                    }
                });

        return resultado.toString();
    }     
    

    public String getEntradaSalida(String fechaDesde, String fechaHasta, 
                                   String cliente, String cuenta, 
                                   String boveda, String sucursal) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        double entrada = 0;
        double salida = 0;
        DataSource ds = jdbcTemplate.getDataSource();
        try {
            conn = ds.getConnection();
            String SQL = 
                " select cod_seri_cmpb, num_cmpb, nvl(mon_efec,0) mon_efec,tip_form_tras," + 
                " decode(tip_form_tras,'2','INGRESO','SALIDA') tip_form_tras2, cod_punt_orig," + 
                " cod_punt_dest, nvl(can_totl_enva,0) can_totl_enva, nvl(est_recu,'0') est_recu, tip_orig," + 
                " tip_dest, nvl(tip_ingr,0) tip_ingr, to_char(fec_proc_aper,'dd/mm/yyyy') fec_proc_aper" + 
                " from tv_cmpb_serv a " + 
                " where fec_proc_aper >= to_date(?,'dd/mm/yyyy') " + 
                " and fec_proc_aper <= to_date(?,'dd/mm/yyyy') and" + 
                " cod_clie_cnta +0 = ? and cod_cnta =  ? " + 
                " and cod_bove = ?  and cod_sucu_htb_cnta = ?" + 
                " and ((tip_orig='1' and tip_dest='3' and tip_form_tras='2') or" + 
                " (tip_orig='2' and tip_dest='1' and tip_form_tras='1') or" + 
                " (tip_orig='2' and tip_dest='3' and tip_form_tras='2') or" + 
                " (tip_orig='2' and tip_dest='3' and tip_form_tras='1')) " + 
                " and est_docu<>'11' and" + 
                " ((nvl(tip_ingr,0) = 1 and nvl(mon_efec,0) != 0 ) or " + 
                " (nvl(tip_ingr,0) = 2 and nvl(mon_efec,0) != 0 ) or nvl(tip_ingr,0) = 0 )" + 
                " order by fec_proc_aper, tip_form_tras,cod_seri_cmpb,num_cmpb";

            CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            pstmt = conn.prepareStatement(SQL);
            pstmt.setString(1, fechaDesde);
            pstmt.setString(2, fechaHasta);
            pstmt.setString(3, cliente);
            pstmt.setString(4, cuenta);
            pstmt.setString(5, boveda);
            pstmt.setString(6, sucursal);
            // Ejecutas el query
            rs = pstmt.executeQuery();
            String valor = null;
            // Iterar por cada uno de los registros encontrados
            while (rs.next()) {
                if (rs.getString("tip_form_tras").equals("2")) {

                    if (rs.getInt("est_recu") >= 2) {
                        valor = montoDeno(rs.getString(2), rs.getString(1));
                    } else {
                        valor = rs.getString(3);
                    }

                    if ((rs.getString("tip_orig").equals("1") || 
                         rs.getString("tip_orig").equals("2")) && 
                        rs.getString("tip_dest").equals("3") && 
                        rs.getString("tip_form_tras").equals("2"))
                        entrada = entrada + Double.parseDouble(valor);
                    else
                        salida = salida + Double.parseDouble(valor);

                } else {

                    if ((rs.getString("tip_orig").equals("1") || 
                         rs.getString("tip_orig").equals("2")) && 
                        rs.getString("tip_dest").equals("3") && 
                        rs.getString("tip_form_tras").equals("2"))
                        entrada = entrada + rs.getDouble(3);
                    else
                        salida = salida + rs.getDouble(3);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close ResultSet, PreparedStatement and Connection
                if(rs!=null) rs.close();
                if(pstmt!=null) pstmt.close();
                if(conn!=null) conn.close();
            } catch (Exception ex) { // Catch All exceptions
                ex.printStackTrace();

            }            
        }
        return entrada + "-" + salida;
    }
  /** Metodo Desfasado NSC 03-09-09 
    public List getEntradasSalidasAgencias(String cliente, String sucursal, 
                                           String fechaDesde, 
                                           String fechaHasta) {
        String SQL = null;
        List listado = new ArrayList();
        double ingresosS = 0;
        double salidasS = 0;
        double ingresosD = 0;
        double salidasD = 0;

        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator('.');
        dfs.setGroupingSeparator(',');
        DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
        df1.setGroupingSize(3);
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        DataSource ds = jdbcTemplate.getDataSource();

        try {
            conn = ds.getConnection(); **/

//            SQL =   "select /*+ rule */'ING' tipo, a.tip_docu_cmpb, a.cod_seri_cmpb, a.num_cmpb," +  
/**                    "       nvl(a.mon_efec,0) mon_efec, a.tip_form_tras, a.tip_unid_mone," + 
                    "       a.cod_punt_orig cod_punt, a.tip_ingr, " +
                    "       to_char(a.fec_proc_aper,'dd/mm/yyyy') fec_proc_aper, ' ' tip_bill," + 
                    "       a.cod_sucu_htb_cnta, b.cod_equi_agen, b.cod_sucu_htb " +
                    "  from   ve_punto b, tv_cmpb_serv a " + 
                    " where  a.fec_proc_aper >= to_date(?,'dd/mm/yyyy')" + 
                    " and    a.fec_proc_aper <= to_date(?,'dd/mm/yyyy')" + 
                    " and    a.cod_clie_cnta +0 = ?" + " and    a.cod_sucu_htb_cnta = ?" + 
                    " and    a.tip_orig      = '1'" + " and    a.tip_dest      = '3'" + 
                    " and    a.tip_form_tras = '2'" + " and    a.est_docu     <> '11'" + 
                    " and    b.cod_punt      = a.cod_punt_orig" + 
                    " and    b.tip_punt not in (11)" + 
                    " and    b.cod_clie_grup = a.cod_clie_cnta" + 
                    " and    nvl(b.ind_pago_deud,0) = 0";
                    if (cliente.equals("14")) {
                        SQL = SQL + " and    b.tip_punt in (1,4,12,14)";
                    }
                    SQL = 
                    SQL + " UNION ALL " + **/
                    
//                    "select /*+ rule */'SAL' tipo, a.tip_docu_cmpb, a.cod_seri_cmpb, a.num_cmpb," + 
/**                    "        nvl(a.mon_efec,0) mon_efec, a.tip_form_tras, a.tip_unid_mone," + 
                    "        a.cod_punt_dest cod_punt, a.tip_ingr, to_char(a.fec_proc_aper,'dd/mm/yyyy') fec_proc_aper, c.tip_bill," + 
                    "        a.cod_sucu_htb_cnta, b.cod_equi_agen, b.cod_sucu_htb " + 
                    " from   ac_pedido d, ac_pedido_deta c, ve_punto b, tv_cmpb_serv a " + 
                    " where  a.fec_proc_aper >= to_date(?,'dd/mm/yyyy')" + 
                    " and    a.fec_proc_aper <= to_date(?,'dd/mm/yyyy')" + 
                    " and    a.cod_clie_cnta +0 = ?" + " and    a.cod_sucu_htb_cnta = ?" + 
                    " and    a.tip_orig      = '2' " + " and    a.tip_dest      = '1' " + 
                    " and    a.tip_form_tras = '1'" + " and    a.est_docu     <> '11' " + 
                    " and    b.cod_punt      = a.cod_punt_dest" + 
                    " and    b.tip_punt not in (11)" + 
                    " and    b.cod_clie_grup = a.cod_clie_cnta" + 
                    " and    c.tip_docu_cmpb = a.tip_docu_cmpb" + 
                    " and    c.cod_seri_cmpb = a.cod_seri_cmpb" + 
                    " and    c.num_cmpb      = a.num_cmpb" + 
                    " and    d.tip_docu_pedi = c.tip_docu_pedi" + 
                    " and    d.cod_seri_pedi = c.cod_seri_pedi" + 
                    " and    d.num_pedi      = c.num_pedi" + " and    d.tip_pedi not in (8)" + 
                    " and    nvl(b.ind_pago_deud,0) = 0";
                    if (cliente.equals("14")) {
                        SQL = SQL + " and    b.tip_punt in (1,4,12,14)";
                    }
                    SQL = SQL + " order by 7 desc,10, 6, 3, 4";
            CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            if (conn != null) {
                pstmt = conn.prepareStatement(SQL);
                pstmt.setString(1, fechaDesde);
                pstmt.setString(2, fechaHasta);
                pstmt.setString(3, cliente);
                pstmt.setString(4, sucursal);
                pstmt.setString(5, fechaDesde);
                pstmt.setString(6, fechaHasta);
                pstmt.setString(7, cliente);
                pstmt.setString(8, sucursal);
                rs = pstmt.executeQuery();
                ComprobanteServicioBean cs = null;
                while (rs.next()) {
                    cs = new ComprobanteServicioBean();
                    cs.setFecha("'" + rs.getString("fec_proc_aper"));
                    cs.setSerie(rs.getString("cod_seri_cmpb"));
                    cs.setNumero(rs.getString("num_cmpb"));
                    PuntoBean punto = puntoDAO.getPunto(rs.getString("cod_punt"));
                    if (punto != null) {
                        cs.setDesAgent(punto.getCodEquiAgen() + "-" + punto.getDesEquiAgen());
                        cs.setDesPunto(punto.getCodPunto() + "-" + punto.getDesPunto());
                    }
                    cs.setTipoRem(rs.getString("tipo"));
                    cs.setTipoBill(tiposDAO.getDescripcion("47", rs.getString("tip_bill")));
                    if (rs.getString("tip_unid_mone").equals("1")) {
                        cs.setMontoDolares(df1.format(Double.parseDouble(rs.getString("mon_efec"))));
                        cs.setMontoSoles("0.00");
                        if (rs.getString("tipo").equals("ING"))
                            ingresosD = ingresosD + rs.getDouble("mon_efec");
                        else
                            salidasD = salidasD + rs.getDouble("mon_efec");
                    } else {
                        cs.setMontoSoles(df1.format(rs.getDouble("mon_efec")));
                        cs.setMontoDolares("0.00");
                        if (rs.getString("tipo").equals("ING"))
                            ingresosS = ingresosS + rs.getDouble("mon_efec");
                        else
                            salidasS = salidasS + rs.getDouble("mon_efec");
                    }
                    listado.add(cs);
                }
                listado.add(df1.format(ingresosS));
                listado.add(df1.format(salidasS));
                listado.add(df1.format(ingresosD));
                listado.add(df1.format(salidasD));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close ResultSet, PreparedStatement and Connection
                rs.close();
                pstmt.close();
                conn.close();
            } catch (Exception ex) { // Catch All exceptions
                ex.printStackTrace();
            }

        }
        return listado;
    } **/
   /** Metodo Nuevo NSC 03-09-09 **/
    public List getEntradasSalidasAgencias(final String cliente,     final String sucursal, 
                                           final String fechaDesde,  final String fechaHasta) {
   

   
        logger.info("Obtener mov. de ingresos y salidas por agencia");
        String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_INSA_AGEN(?,?,?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final List listacomp = new ArrayList();
        CallableStatementCallback cas = new CallableStatementCallback() {
        double ingresosS = 0;
        double salidasS = 0;
        double ingresosD = 0;
        double salidasD = 0;
        public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
         SQLException {
             arg0.setString(1, sucursal);
             arg0.setString(2, cliente);
             arg0.setString(3, fechaDesde);
             arg0.setString(4, fechaHasta);
             arg0.registerOutParameter(5, OracleTypes.CURSOR);
             arg0.registerOutParameter(6, OracleTypes.NUMERIC);            
             arg0.registerOutParameter(7, OracleTypes.VARCHAR);
             arg0.execute();
             logger.error(arg0.getString(7));
             ResultSet rs = (ResultSet)arg0.getObject(5);
             while(rs.next()){
               ComprobanteServicioBean cs = new ComprobanteServicioBean();
               cs.setFecha(rs.getString("fec_proc_aper"));
               cs.setSerie(rs.getString("cod_seri_cmpb"));
               cs.setNumero(rs.getString("num_cmpb"));
               cs.setDesAgent(rs.getString("agen"));
               cs.setDesPunto(rs.getString("punto")); 
               cs.setTipoRem(rs.getString("tipo"));
               cs.setTipoBill(rs.getString("des_tipo"));
               cs.setMoneda(rs.getString("moneda"));
               cs.setMonto(Util.getDoubleFormatted(rs.getDouble("monto")));
               cs.setTipoUnidad(rs.getString("tip_unid_mone"));
               listacomp.add(cs);
              }
             return listacomp;
         }
      };
      this.jdbcTemplate.execute(SQL, cas);
      return listacomp;
    }

    /**
    public List getEntradasSalidasAgenciasReporteExcel(String cliente, String sucursal, 
                                           String fechaDesde, 
                                           String fechaHasta) {
        String SQL = null;
        List listado = new ArrayList();
        double ingresosS = 0;
        double salidasS = 0;
        double ingresosD = 0;
        double salidasD = 0;

        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator('.');
        dfs.setGroupingSeparator(',');
        DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
        df1.setGroupingSize(3);
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        DataSource ds = jdbcTemplate.getDataSource();

        try {
            conn = ds.getConnection();
**/
//            SQL =   "select /*+ rule */'ING' tipo, a.tip_docu_cmpb, a.cod_seri_cmpb, a.num_cmpb," + 
/**                   "       nvl(a.mon_efec,0) mon_efec, a.tip_form_tras, a.tip_unid_mone," + 
                    "       a.cod_punt_orig cod_punt, a.tip_ingr, " +
                    "       to_char(a.fec_proc_aper,'dd/mm/yyyy') fec_proc_aper, ' ' tip_bill," + 
                    "       a.cod_sucu_htb_cnta, b.cod_equi_agen, b.cod_sucu_htb " +
                    "  from   ve_punto b, tv_cmpb_serv a " + 
                    " where  a.fec_proc_aper >= to_date(?,'dd/mm/yyyy')" + 
                    " and    a.fec_proc_aper <= to_date(?,'dd/mm/yyyy')" + 
                    " and    a.cod_clie_cnta +0 = ?" + " and    a.cod_sucu_htb_cnta = ?" + 
                    " and    a.tip_orig      = '1'" + " and    a.tip_dest      = '3'" + 
                    " and    a.tip_form_tras = '2'" + " and    a.est_docu     <> '11'" + 
                    " and    b.cod_punt      = a.cod_punt_orig" + 
                    " and    b.tip_punt not in (11)" + 
                    " and    b.cod_clie_grup = a.cod_clie_cnta" + 
                    " and    nvl(b.ind_pago_deud,0) = 0";
                    if (cliente.equals("14")) {
                        SQL = SQL + " and    b.tip_punt in (1,4,12,14)";
                    }
                    SQL = 
                    SQL + " UNION ALL " +   **/
//                    "select /*+ rule */'SAL' tipo, a.tip_docu_cmpb, a.cod_seri_cmpb, a.num_cmpb," + 
/**                    "        nvl(a.mon_efec,0) mon_efec, a.tip_form_tras, a.tip_unid_mone," + 
                    "        a.cod_punt_dest cod_punt, a.tip_ingr, to_char(a.fec_proc_aper,'dd/mm/yyyy') fec_proc_aper, c.tip_bill," + 
                    "        a.cod_sucu_htb_cnta, b.cod_equi_agen, b.cod_sucu_htb " + 
                    " from   ac_pedido d, ac_pedido_deta c, ve_punto b, tv_cmpb_serv a " + 
                    " where  a.fec_proc_aper >= to_date(?,'dd/mm/yyyy')" + 
                    " and    a.fec_proc_aper <= to_date(?,'dd/mm/yyyy')" + 
                    " and    a.cod_clie_cnta +0 = ?" + " and    a.cod_sucu_htb_cnta = ?" + 
                    " and    a.tip_orig      = '2' " + " and    a.tip_dest      = '1' " + 
                    " and    a.tip_form_tras = '1'" + " and    a.est_docu     <> '11' " + 
                    " and    b.cod_punt      = a.cod_punt_dest" + 
                    " and    b.tip_punt not in (11)" + 
                    " and    b.cod_clie_grup = a.cod_clie_cnta" + 
                    " and    c.tip_docu_cmpb = a.tip_docu_cmpb" + 
                    " and    c.cod_seri_cmpb = a.cod_seri_cmpb" + 
                    " and    c.num_cmpb      = a.num_cmpb" + 
                    " and    d.tip_docu_pedi = c.tip_docu_pedi" + 
                    " and    d.cod_seri_pedi = c.cod_seri_pedi" + 
                    " and    d.num_pedi      = c.num_pedi" + " and    d.tip_pedi not in (8)" + 
                    " and    nvl(b.ind_pago_deud,0) = 0";
                    if (cliente.equals("14")) {
                        SQL = SQL + " and    b.tip_punt in (1,4,12,14)";
                    }
                    SQL = SQL + " order by 7 desc,10, 6, 3, 4";
            CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            if (conn != null) {
                pstmt = conn.prepareStatement(SQL);
                pstmt.setString(1, fechaDesde);
                pstmt.setString(2, fechaHasta);
                pstmt.setString(3, cliente);
                pstmt.setString(4, sucursal);
                pstmt.setString(5, fechaDesde);
                pstmt.setString(6, fechaHasta);
                pstmt.setString(7, cliente);
                pstmt.setString(8, sucursal);
                rs = pstmt.executeQuery();
                ComprobanteServicioBean cs = null;
                while (rs.next()) {
                    cs = new ComprobanteServicioBean();
System.out.println(rs.getString("cod_equi_agen"));
                    if (cliente.equals("14")) {
                        if (rs.getString("tip_unid_mone").equals("1"))
                            cs.setTipoUnidad("1210");
                        else
                            cs.setTipoUnidad("1100");
                        if (rs.getString("tipo").equals("ING")) {
                            cs.setDesAgent("'" + rs.getString("cod_equi_agen"));
                            cs.setDesPunto("923");
                        } else {
                            cs.setDesAgent("923");
                            cs.setDesPunto("'" + rs.getString("cod_equi_agen"));
                        }
                        if (rs.getString("cod_sucu_htb").equals("1")) {
                            cs.setCuenta("'11010900000101");
                            cs.setResp("1000300");
                        } else {
                            cs.setCuenta("'19080900000107");
                            cs.setResp("9720000");
                        }
                        if (rs.getString("tipo").equals("SAL")) {
                            cs.setValor(df1.format(rs.getDouble("mon_efec")));
                            cs.setValor2("");
                        } else {
                            cs.setValor("");
                            cs.setValor2(df1.format(rs.getDouble("mon_efec")));
                        }
                        cs.setNumero(rs.getString("num_cmpb"));
                        cs.setObs("RemesaHermes");
                        cs.setTipoDoc("FCR");
                        cs.setCantidad("001");
                        if (rs.getString("tip_unid_mone").equals("1")) {
                            if (rs.getString("tipo").equals("ING"))
                                ingresosD = ingresosD + rs.getDouble("mon_efec");
                            else
                                salidasD = salidasD + rs.getDouble("mon_efec");
                        } else {
                            if (rs.getString("tipo").equals("ING"))
                                ingresosS = ingresosS + rs.getDouble("mon_efec");
                            else
                                salidasS = salidasS + rs.getDouble("mon_efec");
                        }
                    } else {
                        cs.setFecha("'" + rs.getString("fec_proc_aper"));
                        cs.setSerie(rs.getString("cod_seri_cmpb"));
                        cs.setNumero(rs.getString("num_cmpb"));
                        PuntoBean punto = puntoDAO.getPunto(rs.getString("cod_punt"));
                        if (punto != null) {
                            cs.setDesAgent(punto.getCodEquiAgen() + "-" + punto.getDesEquiAgen());
                            cs.setDesPunto(punto.getCodPunto() + "-" + punto.getDesPunto());
                        }
                        cs.setTipoRem(rs.getString("tipo"));
                        cs.setTipoBill(tiposDAO.getDescripcion("47", rs.getString("tip_bill")));
                        if (rs.getString("tip_unid_mone").equals("1")) {
                            cs.setMontoDolares(df1.format(Double.parseDouble(rs.getString("mon_efec"))));
                            cs.setMontoSoles("0.00");
                            if (rs.getString("tipo").equals("ING"))
                                ingresosD = ingresosD + rs.getDouble("mon_efec");
                            else
                                salidasD = salidasD + rs.getDouble("mon_efec");
                        } else {
                            cs.setMontoSoles(df1.format(rs.getDouble("mon_efec")));
                            cs.setMontoDolares("0.00");
                            if (rs.getString("tipo").equals("ING"))
                                ingresosS = ingresosS + rs.getDouble("mon_efec");
                            else
                                salidasS = salidasS + rs.getDouble("mon_efec");
                        }
                    }
                    listado.add(cs);
                }
                listado.add(df1.format(ingresosS));
                listado.add(df1.format(salidasS));
                listado.add(df1.format(ingresosD));
                listado.add(df1.format(salidasD));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close ResultSet, PreparedStatement and Connection
                rs.close();
                pstmt.close();
                conn.close();
            } catch (Exception ex) { // Catch All exceptions
                ex.printStackTrace();

            }
        }
        return listado;
    }**/
    
    
    /** Metodo Nuevo NSC 21-09-09 **/
    
     public List getEntradasSalidasAgenciasReporteExcel(final String cliente,     final String sucursal, 
                                            final String fechaDesde,  final String fechaHasta) {
    
        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator('.');
        dfs.setGroupingSeparator(',');        
        final DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
        final DecimalFormat df2 = new DecimalFormat("###,#############0.00", dfs);
        df1.setGroupingSize(3);
    
         logger.info("Obtener mov. de ingresos y salidas por agencia");
         String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_INSA_AGEN(?,?,?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
         final List listacomp = new ArrayList();
         CallableStatementCallback cas = new CallableStatementCallback() {
         double ingresosS = 0;
         double salidasS = 0;
         double ingresosD = 0;
         double salidasD = 0;
         public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
          SQLException {
              arg0.setString(1, sucursal);
              arg0.setString(2, cliente);
              arg0.setString(3, fechaDesde);
              arg0.setString(4, fechaHasta);
              arg0.registerOutParameter(5, OracleTypes.CURSOR);
              arg0.registerOutParameter(6, OracleTypes.NUMERIC);            
              arg0.registerOutParameter(7, OracleTypes.VARCHAR);
              arg0.execute();
              logger.error(arg0.getString(7));
              ResultSet rs = (ResultSet)arg0.getObject(5);
              while(rs.next()){
                ComprobanteServicioBean cs = new ComprobanteServicioBean();
                   System.out.println(rs.getString("cod_equi_agen"));
                   if (cliente.equals("14")) {
                       if (rs.getString("tip_unid_mone").equals("1"))
                           cs.setTipoUnidad("1210");
                       else
                           cs.setTipoUnidad("1100");
                       if (rs.getString("tipo").equals("ING")) {
                           cs.setDesAgent(rs.getString("cod_equi_agen"));
                           cs.setDesPunto("923");
                       } else {
                           cs.setDesAgent("923");
                           cs.setDesPunto(rs.getString("cod_equi_agen"));
                       }
                       if (rs.getString("cod_sucu_htb").equals("1")) {
                           cs.setCuenta("11010900000101");
                           cs.setResp("1000300");
                       } else {
                           cs.setCuenta("19080900000107");
                           cs.setResp("9720000");
    }
                       if (rs.getString("tipo").equals("SAL")) {
                           cs.setValor(df1.format(rs.getDouble("mon_efec")));
                           cs.setValor2("");
                       } else {
                           cs.setValor("");
                           cs.setValor2(df1.format(rs.getDouble("mon_efec")));
                       }
                       cs.setNumero(rs.getString("num_cmpb"));
                       cs.setObs("RemesaHermes");
                       cs.setTipoDoc("FCR");
                       cs.setCantidad("001");
                       if (rs.getString("tip_unid_mone").equals("1")) {
                           if (rs.getString("tipo").equals("ING"))
                               ingresosD = ingresosD + rs.getDouble("mon_efec");
                           else
                               salidasD = salidasD + rs.getDouble("mon_efec");
                       } else {
                           if (rs.getString("tipo").equals("ING"))
                               ingresosS = ingresosS + rs.getDouble("mon_efec");
                           else
                               salidasS = salidasS + rs.getDouble("mon_efec");
                       }
                   } else {
                       cs.setFecha(rs.getString("fec_proc_aper"));
                       cs.setSerie(rs.getString("cod_seri_cmpb"));
                       cs.setNumero(rs.getString("num_cmpb"));
                       PuntoBean punto = puntoDAO.getPunto(rs.getString("cod_punt"));
                       if (punto != null) {
                           cs.setDesAgent(punto.getCodEquiAgen() + "-" + punto.getDesEquiAgen());
                           cs.setDesPunto(punto.getCodPunto() + "-" + punto.getDesPunto());
                       }
                       cs.setTipoRem(rs.getString("tipo"));
                       cs.setTipoBill(tiposDAO.getDescripcion("47", rs.getString("tip_bill")));
                       if (rs.getString("tip_unid_mone").equals("1")) {
                           cs.setMontoDolares(df1.format(Double.parseDouble(rs.getString("mon_efec"))));
                           cs.setMontoSoles("0.00");
                           if (rs.getString("tipo").equals("ING"))
                               ingresosD = ingresosD + rs.getDouble("mon_efec");
                           else
                               salidasD = salidasD + rs.getDouble("mon_efec");
                       } else {
                           cs.setMontoSoles(df1.format(rs.getDouble("mon_efec")));
                           cs.setMontoDolares("0.00");
                           if (rs.getString("tipo").equals("ING"))
                               ingresosS = ingresosS + rs.getDouble("mon_efec");
                           else
                               salidasS = salidasS + rs.getDouble("mon_efec");
                       }
                   }
                   listacomp.add(cs);
               }
              return listacomp;
          }
       };
       this.jdbcTemplate.execute(SQL, cas);
       return listacomp;
     } 
     
    /** Metodo Desfasado NSC 26-08-09
    public List getRemesasPorProcesar(String fechaDesde, String cliente, 
                                      String cuenta, String boveda, 
                                      String sucursal) {
        String SQL = 
            "select cod_seri_cmpb, num_cmpb,cod_punt_orig,can_totl_enva,to_char(mon_efec,'999,999,999,999.00') mon_efec, nvl(mon_efec,0) monto " + 
            " from tv_cmpb_serv where" + 
            " fec_proc_aper = to_date(?,'dd/mm/yyyy') and" + 
            " cod_clie_cnta +0 = ? and" + " cod_cnta = ? and" + 
            " cod_bove = ? and" + " cod_sucu_htb_cnta = ? and " + 
            " tip_dest = '3' and tip_form_tras = '2' and tip_orig in ('1','2') and" + 
            " est_recu = '1' and est_docu <> '11' and" + 
            " ((nvl(tip_ingr,0) = 1 and nvl(mon_efec,0) != 0 ) or (nvl(tip_ingr,0) = 2 and" + 
            " nvl(mon_efec,0) != 0 ) or (nvl(tip_ingr,0) = 0))" + 
            " order by cod_seri_cmpb,num_cmpb";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = 
            new Object[] { fechaDesde, cliente, cuenta, boveda, sucursal };
        //Ejecutar el query
        return jdbcTemplate.query(SQL, params, new RemesasPorProcesasMapper());
    }

    protected class RemesasPorProcesasMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad ClienteBean
            ComprobanteServicioBean cs = new ComprobanteServicioBean();
            cs.setSerie(rs.getString(1));
            cs.setNumero(rs.getString(2));
            PuntoBean puntoO = puntoDAO.getPunto(rs.getString(3));
            if (puntoO != null) {
                cs.setPuntoOrigen(puntoO.getDesPunto());
            }
            cs.setCantidad(rs.getString(4));
            cs.setTotal(rs.getString(5));
            cs.setContiene(rs.getString("monto"));
            return cs;
        }
    }
    **/
    /** NUEVO NSC 26-08-09 **/
    public List getRemesasPorProcesar(final String fechaDesde, final String cliente, 
                                    final String cuenta, final String boveda, 
                                    final String sucursal) {

        logger.info("Obtener Remesas por Procesar");
        String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_REME_PROC(?,?,?,?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final List listareme = new ArrayList();
        CallableStatementCallback cas = new CallableStatementCallback() {
        public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
        SQLException {
            arg0.setString(1, sucursal);
            arg0.setString(2, cliente);
            arg0.setString(3, cuenta);
            arg0.setString(4, boveda);
            arg0.setString(5, fechaDesde);                
            arg0.registerOutParameter(6, OracleTypes.CURSOR);
            arg0.registerOutParameter(7, OracleTypes.NUMERIC);            
            arg0.registerOutParameter(8, OracleTypes.VARCHAR);
            arg0.execute();
            logger.error(arg0.getString(8));
            ResultSet rs = (ResultSet)arg0.getObject(6);
            while(rs.next()){
                 ComprobanteServicioBean cs = new ComprobanteServicioBean();
                 cs.setSerie(rs.getString(1));
                 cs.setNumero(rs.getString(2));
                 PuntoBean puntoO = puntoDAO.getPunto(rs.getString(3));
                 if (puntoO != null) {
                     cs.setPuntoOrigen(puntoO.getDesPunto());
                 }
                 cs.setCantidad(rs.getString(4));
                 cs.setTotal(rs.getString(5));
                 cs.setContiene(rs.getString("monto"));
                 listareme.add(cs);                               
             }
             return listareme;
        }
     };
     this.jdbcTemplate.execute(SQL, cas);
     return listareme;
   } 
    
    /** Metodo Desfasado NSC 24-08-09
    public List getServicioCompensacion(String fechai, String fechah, 
                                        String sucursal, String cliente, 
                                        String punto) {
        String SQL = 
            "select b.cod_clie, d.nom_clie, a.tip_docu_cmpb tipoo, a.cod_seri_cmpb serieo," + 
            "       a.num_cmpb co, a.cod_punt_orig po, a.des_punt dpo," + 
            "       to_char(a.fec_orig,'dd/mm/yyyy') fo," + 
            "       a.cod_ruta_orig ro, a.nse_punt_orig so," + 
            "       a.cod_ruta_dest rd, a.nse_punt_dest sd," + 
            "       decode(a.tip_unid_mone,1,'$.',2,'S/') uo," + 
            "       (nvl(a.mon_efec,0) + nvl(a.mon_cheq,0)) mo," + 
            "       a.mon_efec, a.mon_cheq," + 
            "       decode(a.tip_unid_mone,1,(nvl(a.mon_efec,0) + nvl(a.mon_cheq,0)),2,0) mdola," + 
            "       decode(a.tip_unid_mone,2,(nvl(a.mon_efec,0) + nvl(a.mon_cheq,0)),1,0) msola," + 
            "       b.tip_docu_cmpb tipod, b.cod_seri_cmpb seried, b.num_cmpb cd, " + 
            "       b.cod_punt_dest pd, c.des_punt dpd," + 
            "       to_char(b.fec_dest,'dd/mm/yyyy') fd," + 
            "       b.cod_ruta_orig ro, b.nse_punt_orig so," + 
            "       b.cod_ruta_dest rd, b.nse_punt_dest sd, b.est_docu" + 
            " from  ve_cliente d, ve_punto c, tv_cmpb_serv b," + 
            "       (select a.tip_docu_cmpb, a.cod_seri_cmpb, a.num_cmpb," + 
            "        a.cod_seri_cmpb_prin, a.num_cmpb_prin," + 
            "        a.cod_punt_orig, b.des_punt, a.fec_orig," + 
            "        a.cod_ruta_orig, a.nse_punt_orig," + 
            "        a.cod_ruta_dest, a.nse_punt_dest," + 
            "        a.tip_unid_mone, a.mon_efec, a.mon_cheq" + 
            "        from   ve_punto b, tv_cmpb_serv a" + 
            "        where  a.tip_docu_cmpb = 'CS'" + 
            "               and    a.fec_orig >= to_date(?,'DD/MM/YYYY')" + 
            "               and    a.fec_orig <= to_date(?,'DD/MM/YYYY')" + 
            "               and    a.ind_bcp      = 1" + 
            "               and    a.tip_form_tras = '2'" + 
            "               and    a.cod_sucu_htb_cnta = ?" + 
            "               and a.cod_clie = ?";
        if (!punto.equals("0")) {
            SQL = SQL + " and a.cod_punt_orig = ?";
        }
        SQL = 
SQL + " and b.cod_punt = a.cod_punt_orig) a" + " where  b.num_cmpb = a.num_cmpb" + 
  " and    b.tip_docu_cmpb = a.tip_docu_cmpb" + 
  " and    b.tip_form_tras = '1'" + " and    B.ind_bcp      = 1" + 
  " and    c.cod_punt = b.cod_punt_dest" + " and    d.cod_clie = b.cod_clie" + 
  " order by b.cod_clie, a.fec_orig, a.cod_punt_orig, a.cod_ruta_orig, a.nse_punt_orig";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = 
            new Object[] { fechai, fechah, sucursal, cliente, punto };
        return jdbcTemplate.query(SQL, params, new ServicioCompeMapper());
    }**/
    /** Metodo Desfasado NSC 24-08-09
     protected class ServicioCompeMapper implements RowMapper {

         public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
             //Establecer los atributos en la entidad ClienteBean
             DecimalFormatSymbols dfs = new DecimalFormatSymbols();
             dfs.setDecimalSeparator('.');
             dfs.setGroupingSeparator(',');
             DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
             df1.setGroupingSize(3);

             ComprobanteServicioBean cs = new ComprobanteServicioBean();
             cs.setFecha(rs.getString("fo"));
             cs.setNumero(rs.getString("serieo") + " - " + rs.getString("co"));
             cs.setPuntoOrigen("222" + rs.getString("dpo"));
             cs.setPuntoDestino(rs.getString("dpd"));
             cs.setFechaDestino(rs.getString("fd"));
             cs.setCantidad(rs.getString("uo"));
             cs.setTotal(rs.getString("mon_efec"));
             cs.setTotalS(df1.format(Double.parseDouble(rs.getString("mon_efec"))));
             cs.setEstado(getDesDocu(rs.getString("tipod"), 
                                     rs.getString("est_docu")));
             return cs;
         }
    } **/
     
    /** Nuevo NSC 24-08-09 **/
     public List getServicioCompensacion( final String fechai, final String fechah, 
                                          final String sucursal, final String cliente, 
                                          final String punto) {

          logger.info("Obtener datos para servicio de compensacion");
          String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_SERV_COMP(?,?,?,?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
          final List listaserv = new ArrayList();
          CallableStatementCallback cas = new CallableStatementCallback() {
          public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
          SQLException {
              arg0.setString(1, sucursal);
              arg0.setString(2, cliente);
              arg0.setString(3, punto);
              arg0.setString(4, fechai);
              arg0.setString(5, fechah);
              arg0.registerOutParameter(6, OracleTypes.CURSOR);
              arg0.registerOutParameter(7, OracleTypes.NUMERIC);            
              arg0.registerOutParameter(8, OracleTypes.VARCHAR);
              arg0.execute();
              logger.error(arg0.getString(8));
              ResultSet rs = (ResultSet)arg0.getObject(6);
              while(rs.next()){
                    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
                    dfs.setDecimalSeparator('.');
                    dfs.setGroupingSeparator(',');
                    DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
                    df1.setGroupingSize(3);

                    ComprobanteServicioBean cs = new ComprobanteServicioBean();
                    cs.setFecha(rs.getString("fo"));
                    cs.setNumero(rs.getString("serieo") + " - " + rs.getString("co"));
                    cs.setPuntoOrigen(rs.getString("dpo"));
                    cs.setPuntoDestino(rs.getString("dpd"));
                    cs.setFechaDestino(rs.getString("fd"));
                    cs.setCantidad(rs.getString("uo"));
                    cs.setTotal(rs.getString("mon_efec"));
                    cs.setTotalS(df1.format(Double.parseDouble(rs.getString("mon_efec"))));
                    cs.setEstado(getDesDocu(rs.getString("tipod"), 
                                            rs.getString("est_docu")));
                   listaserv.add(cs);                               
               }
               return listaserv;
          }
       };
       this.jdbcTemplate.execute(SQL, cas);
       return listaserv;
     } 
 /** Nuevo AMS 21-09-09 **/
  public List getServicioCompensacionTotal( final String fechai, final String fechah, 
                                       final String sucursal, final String cliente, 
                                       final String punto) {

       logger.info("Obtener datos para servicio de compensacion Sumatoria");
       String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_SERV_COMP_TOTAL(?,?,?,?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
       final List listaserv = new ArrayList();
       CallableStatementCallback cas = new CallableStatementCallback() {
       public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
       SQLException {
           arg0.setString(1, sucursal);
           arg0.setString(2, cliente);
           arg0.setString(3, punto);
           arg0.setString(4, fechai);
           arg0.setString(5, fechah);
           arg0.registerOutParameter(6, OracleTypes.CURSOR);
           arg0.registerOutParameter(7, OracleTypes.NUMERIC);            
           arg0.registerOutParameter(8, OracleTypes.VARCHAR);
           arg0.execute();
           logger.error(arg0.getString(8));
           ResultSet rs = (ResultSet)arg0.getObject(6);
           while(rs.next()){
                DecimalFormatSymbols dfs = new DecimalFormatSymbols();
                dfs.setDecimalSeparator('.');
                dfs.setGroupingSeparator(',');
                DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
                df1.setGroupingSize(3);

                ComprobanteServicioBean cs = new ComprobanteServicioBean();
                cs.setTipoDestino(rs.getString("tp"));
                cs.setTipoDoc(rs.getString("uo"));
                cs.setTotalS(df1.format(Double.parseDouble(rs.getString("mo"))));
                listaserv.add(cs);                               
            }
            return listaserv;
       }
    };
    this.jdbcTemplate.execute(SQL, cas);
    return listaserv;
  } 

    public String getDesDocu(String tipoDocu, String estado) {
        String SQL = 
            "select des_abrv from tg_estd_docu" + " where tip_docu = ?  and est_docu = ?";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = new Object[] { tipoDocu, estado };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "";
        }
    }

    /** Metodo Desfasado NSC 27-08-09 
    public List getPiezasProcesadas(String fechaDesde, String fechaHasta, 
                                    String sucursal, String cliente, 
                                    String moneda) {
        String SQL = 
    **/    
    //        "Select /*+ INDEX(a TV_CMPB_SERV_IDX1 ) */" + "a.cod_clie_cnta cuenta," + 
    /**        "a.cod_punt_orig punto," + "c.des_punt descripcion," + 
            "d.can_valo_nomi valor," + "sum(b.mon_deno) monto," + 
            "sum(b.can_piez) piezas " + 
            "from tv_cmpb_serv a, ac_cmpb_deno b, ve_punto c, ac_deno_mone d " + 
            "Where  a.fec_proc_aper >= to_date(?,'dd/mm/yyyy') " + 
            "and a.fec_proc_aper <= to_date(?,'dd/mm/yyyy') " + 
            "and a.tip_orig||'' = '1' " + "and a.tip_dest||'' = '3' " + 
            "and a.cod_sucu_htb_cnta = ? " + "and a.cod_clie_cnta = ? " + 
            "and a.tip_unid_mone||'' = ? " + "and a.num_cmpb = b.num_cmpb " + 
            "and a.cod_seri_cmpb = b.cod_seri_cmpb " + 
            "and a.tip_docu_cmpb = b.tip_docu_cmpb " + 
            "and a.cod_punt_orig = c.cod_punt " + 
            "and c.tip_punt in (1,4,19,12,14) " + 
            "and d.tip_unid_mone = a.tip_unid_mone " + 
            "and d.tip_mone = b.tip_mone " + "and d.cod_deno = b.cod_deno " + 
            "Group by a.cod_clie_cnta, a.cod_punt_orig, c.des_punt, d.can_valo_nomi " + 
            "Order by 1,2";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = 
            new Object[] { fechaDesde, fechaHasta, sucursal, cliente, moneda };
        return jdbcTemplate.query(SQL, params, new PiezasProcesadasMapper());
    }
    
    protected class PiezasProcesadasMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad ClienteBean
            ComprobanteServicioBean cs = new ComprobanteServicioBean();
            cs.setCliente(rs.getString("cuenta"));
            cs.setPuntoOrigen(rs.getString("punto"));
            cs.setDesPunto(rs.getString("descripcion"));
            cs.setValor(rs.getString("valor"));
            cs.setTotal(rs.getString("monto"));
            cs.setCantidad(rs.getString("piezas"));
            return cs;
        }
    } **/
    /** NUEVO NSC 27-08-09 **/
     public List getPiezasProcesadas(final String fechaDesde, final String fechaHasta, 
                                     final String sucursal, final String cliente, 
                                     final String moneda) {

          logger.info("Obtener piezas procesadas");
          String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_PIEZ_PROC(?,?,?,?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
          final List listapiezas = new ArrayList();
          CallableStatementCallback cas = new CallableStatementCallback() {
          public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
          SQLException {
              arg0.setString(1, sucursal);
              arg0.setString(2, cliente);
              arg0.setString(3, moneda);
              arg0.setString(4, fechaDesde);
              arg0.setString(5, fechaHasta);              
              arg0.registerOutParameter(6, OracleTypes.CURSOR);
              arg0.registerOutParameter(7, OracleTypes.NUMERIC);            
              arg0.registerOutParameter(8, OracleTypes.VARCHAR);
              arg0.execute();
              logger.error(arg0.getString(8));
              ResultSet rs = (ResultSet)arg0.getObject(6);
              while(rs.next()){
                   ComprobanteServicioBean cs = new ComprobanteServicioBean();
                   cs.setCliente(rs.getString("cuenta"));
                   cs.setPuntoOrigen(rs.getString("punto"));
                   cs.setDesPunto(rs.getString("descripcion"));
                   cs.setValor(rs.getString("valor"));
                   cs.setTotal(rs.getString("monto"));
                   cs.setCantidad(rs.getString("piezas"));
                   listapiezas.add(cs);                               
               }
               return listapiezas;
          }
       };
       this.jdbcTemplate.execute(SQL, cas);
       return listapiezas;
     } 
     
    /** Metodo Desfasado NSC 26-08-09 
    public List getActasAnomalia(String sucursal, String fechaDesde, 
                                 String fechaHasta, String cliente) {
        String SQL = 
            "Select d.cod_sucu_htb, d.cod_sucu_htb_cnta, d.cod_cliente, rtrim(d.nom_cliente) nom_cliente, " + 
            "to_char(d.fec_emis,'dd/mm/yyyy') fec_emis, d.punto, d.des_punto, d.cod_modulo, " + 
            "initcap(ltrim(rtrim(d.desc_modulo))) des_modulo, " + 
            "d.tip_docu_cmpb, d.cod_seri_cmpb, d.num_cmpb, d.tipo_remesa, decode(d.moneda,'2','S/.','1','US$',d.moneda) moneda, " + 
            "to_char(d.dice_cont,'999,999,999,999.00') dice_cont, to_char(d.contiene,'999,999,999,999.00') contiene, to_char(d.diferencia,'999,999,999,999.00') diferencia, " + 
            "b.num_cint, c.des_tipo, to_char(b.mon_anom,'999,999,999,999.00') mon_anom, " + 
            "d.nom_clie_cnta, d.desc_cnta, d.num_acta, d.cod_seri_acta, d.tip_docu_acta, " + 
            "b.hor_hall_dife hora, Nvl(b.txt_obsv,' ') obse, Nvl(b.nom_resp,' ') resp, to_char(d.fec_proc_aper,'dd/mm/yyyy') fec_proc_aper " + 
            "from v_dife_cmpb_aper d, ac_acta_deta b, tg_tabl_tipo c " + 
            "where d.cod_sucu_htb_cnta = ? " + 
            "and d.fec_proc_aper between to_date(?,'dd/mm/yyyy') and to_date(?,'dd/mm/yyyy') " + 
            "and d.cod_clie_cnta+0 = ? " + "and d.contiene is not null " + 
            "and abs(d.diferencia) >= 0 " + "and d.num_acta = b.num_acta " + 
            "and d.cod_seri_acta = b.cod_seri_acta " + 
            "and d.tip_docu_acta = b.tip_docu_acta " + 
            "and d.tip_docu_acta in ('AC','AI') " + 
            "and b.cod_anom = c.cod_tipo " + "and c.cod_grup_tipo = 67 " + 
            "and b.cod_anom in ('4', '9', '13', '14', '15', '16', '23', '24') " + 
            "order by cod_cliente, cod_modulo, d.moneda, d.tip_docu_cmpb, d.cod_seri_cmpb, d.num_cmpb, " + 
            "d.tip_docu_acta, d.cod_seri_acta, d.num_acta, c.des_tipo";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = 
            new Object[] { sucursal, fechaDesde, fechaHasta, cliente };
        return jdbcTemplate.query(SQL, params, new ActasAnomaliasMapper());
    }

    protected class ActasAnomaliasMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad 
            ComprobanteServicioBean cs = new ComprobanteServicioBean();
            cs.setCuenta(rs.getString("des_cnta"));
            cs.setCliente(rs.getString("nom_cliente"));
            cs.setFecha(rs.getString("fec_proc_aper"));
            cs.setDesPunto(rs.getString("des_punto"));
            cs.setBoveda(rs.getString("des_modulo"));
            cs.setSerie(rs.getString("cod_seri_cmpb"));
            cs.setNumero(rs.getString("num_cmpb"));
            cs.setTipoUnidad(rs.getString("moneda"));
            cs.setDiferencia(rs.getString("diferencia"));
            cs.setDice(rs.getString("dice_cont"));
            cs.setContiene(rs.getString("contiene"));
            cs.setTipoDoc(rs.getString("tip_docu_acta"));
            cs.setSerieActa(rs.getString("cod_seri_acta"));
            cs.setNumActa(rs.getString("num_acta"));
            cs.setDesTipo(rs.getString("des_tipo"));
            cs.setAnomalia(rs.getString("mon_anom"));
            cs.setObs(rs.getString("obse"));
            cs.setResp(rs.getString("resp"));
            return cs;
        }
    } **/
    /** NUEVO NSC 26-08-09 **/
     public List getActasAnomalia(final String sucursal, final String fechaDesde, 
                                  final String fechaHasta, final String cliente) {

          logger.info("Obtener saldos reales por cuenta.");
          String SQL = "{ call APERTURA.HWPG_ACTA.HWPR_LIST_ACTA_ANOM(?,?,?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
          final List listaacta = new ArrayList();
          CallableStatementCallback cas = new CallableStatementCallback() {
          public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
          SQLException {
              arg0.setString(1, sucursal);
              arg0.setString(2, cliente);
              arg0.setString(3, fechaDesde);
              arg0.setString(4, fechaHasta);              
              arg0.registerOutParameter(5, OracleTypes.CURSOR);
              arg0.registerOutParameter(6, OracleTypes.NUMERIC);            
              arg0.registerOutParameter(7, OracleTypes.VARCHAR);
              arg0.execute();
              logger.error(arg0.getString(7));
              ResultSet rs = (ResultSet)arg0.getObject(5);
              while(rs.next()){
                   ComprobanteServicioBean cs = new ComprobanteServicioBean();
                   cs.setCuenta(rs.getString("desc_cnta"));
                   cs.setCliente(rs.getString("nom_cliente"));
                   cs.setFecha(rs.getString("fec_proc_aper"));
                   cs.setDesPunto(rs.getString("des_punto"));
                   cs.setBoveda(rs.getString("des_modulo"));
                   cs.setSerie(rs.getString("cod_seri_cmpb"));
                   cs.setNumero(rs.getString("num_cmpb"));
                   cs.setTipoUnidad(rs.getString("moneda"));
                   cs.setDiferencia(rs.getString("diferencia"));
                   cs.setDice(rs.getString("dice_cont"));                   
                   cs.setContiene(rs.getString("contiene"));
                   cs.setTipoDoc(rs.getString("tip_docu_acta"));
                   cs.setSerieActa(rs.getString("cod_seri_acta"));
                   cs.setNumActa(rs.getString("num_acta"));
                   cs.setDesTipo(rs.getString("des_tipo"));
                   cs.setAnomalia(rs.getString("mon_anom"));
                   cs.setObs(rs.getString("obse"));
                   cs.setResp(rs.getString("resp"));
                   listaacta.add(cs);                               
               }
               return listaacta;
          }
       };
       this.jdbcTemplate.execute(SQL, cas);
       return listaacta;
     } 
  /** Metodo Desfasado NSC 12-09-09    
    public List getDetalleRecojo(String fechaDesde, String fechaHasta, 
                                 String cliente, String codigo, 
                                 String sucursal) {
            String SQL = 
                "Select /+ index(tv_cmpb_serv IDX_TV_CMPB_SERV_04) /" + "a.cod_clie cliente, " +  
                "a.fec_orig, " + "b.des_punt punto," + "a.num_cmpb CS," + 
                "Nvl(to_char(a.fec_orig,'dd/mm/yyyy'),' ') fecha_atencion," + 
                "Nvl(to_char(a.hor_pedi,'dd/mm/yyyy'),' ') fecha_pedido," + 
                "Nvl(to_char(a.hor_pedi,'hh12:miPM'),' ')  hora_pedido," + 
                "a.cod_ruta_orig Ruta," + "a.nse_punt_orig Secuencia," + 
                "to_char(c.hor_lleg_punt, 'hh24:mi') hora_lleg," + 
                "to_char(c.hor_sali_punt, 'hh24:mi') hora_sali," + 
                "to_char(c.hor_inic_prog, 'hh24:mi') inicio_prog," + 
                "to_char(c.hor_finl_prog, 'hh24:mi') final_prog " + 
                "from ve_punto d, cbtd_hoja_ruta c, ve_punto b , tv_cmpb_serv a " + 
                "where    a.tip_docu_cmpb = 'CS' " + 
                "and substr(a.cod_seri_cmpb,1,1) != 'I' " + 
                "and a.fec_orig >= to_date(?,'dd/mm/yyyy') " + 
                "and a.fec_orig <= to_date(?,'dd/mm/yyyy') " + 
                "and a.cod_clie = ? " +
                "and ( "+codigo+" is null or a.cod_punt_orig = "+codigo+ " )";
            SQL = 
     SQL + " and a.tip_punt_orig in (1, 4, 12) " + "and a.tip_form_tras ||'' = '2' " + 
      "and a.cod_punt_orig = b.cod_punt " + "and a.cod_punt_dest = d.cod_punt " + 
      "and a.cod_sucu_htb = ?" + "and a.tip_punt_orig != '11' " + 
      "and c.fec_prgn = a.fec_orig " + "and c.nse_punt_bove = a.nse_punt_orig " + 
      "and c.cod_ruta = a.cod_ruta_orig " + "and c.cod_punt = a.cod_punt_orig " + 
      "and c.cod_sucu = a.cod_sucu_htb " + "and a.ind_prog = c.ind_prog " + 
      "Order by 3,2,4";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = 
            new Object[] { fechaDesde, fechaHasta, cliente, sucursal };
        return jdbcTemplate.query(SQL, params, new DetalleRecojoMapper());
    } **/
  /**
    protected class DetalleRecojoMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad 
            ComprobanteServicioBean cs = new ComprobanteServicioBean();
            cs.setDesPunto(rs.getString("punto"));
            cs.setFecha(rs.getString("fecha_atencion"));
            cs.setNumero(rs.getString("cs"));
            String ini = "";
            ini = rs.getString("inicio_prog");
            if (ini != null)
                cs.setInicioProg(ini);
            else
                cs.setInicioProg("");
            String fin = "";
            fin = rs.getString("final_prog");
            if (fin != null)
                cs.setFinProg(ini);
            else
                cs.setFinProg("");

            cs.setHoraInicio(rs.getString("hora_lleg"));
            cs.setHoraFin(rs.getString("hora_sali"));

            return cs;
        }
    } **/
   
   /** NUEVO NSC 12-09-09 **/
   public List getDetalleRecojo(final String fechaDesde, final String fechaHasta, 
                                final String cliente,    final String codigo, 
                                final String sucursal) {
         logger.info("Obtener lista de detalle de recojo");
         String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_DETA_RECO(?,?,?,?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(   ),new Exception().getStackTrace()[0].getMethodName(),SQL);
         final List listarecojo = new ArrayList();
         CallableStatementCallback cas = new CallableStatementCallback() {
         public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
         SQLException {
             arg0.setString(1, sucursal);
             arg0.setString(2, cliente);
             arg0.setString(3, codigo);
             arg0.setString(4, fechaDesde);
             arg0.setString(5, fechaHasta);
             arg0.registerOutParameter(6, OracleTypes.CURSOR);
             arg0.registerOutParameter(7, OracleTypes.NUMERIC);            
             arg0.registerOutParameter(8, OracleTypes.VARCHAR);
             arg0.execute();
             logger.error(arg0.getString(8));
             ResultSet rs = (ResultSet)arg0.getObject(6);
             while(rs.next()){
                  ComprobanteServicioBean cs = new ComprobanteServicioBean();
                  cs.setDesPunto(rs.getString("punto"));
                  cs.setFecha(rs.getString("fecha_atencion"));
                  cs.setNumero(rs.getString("cs"));
                  String ini = "";
                  ini = rs.getString("inicio_prog");
                  if (ini != null)
                      cs.setInicioProg(ini);
                  else
                      cs.setInicioProg("");
                  String fin = "";
                  fin = rs.getString("final_prog");
                  if (fin != null)
                      cs.setFinProg(ini);
                  else
                      cs.setFinProg("");
                  cs.setHoraInicio(rs.getString("hora_lleg"));
                  cs.setHoraFin(rs.getString("hora_sali"));
                  listarecojo.add(cs);                               
              }
              return listarecojo;
         }
      };
      this.jdbcTemplate.execute(SQL, cas);
      return listarecojo;
    } 
 /** Metodo Desfasado NSC 24-08-09 
    public List getServiciosAgencia(String servicio, String fechaDesde, 
                                    String fechaHasta, String cliente, 
                                    String sucursal) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        DataSource ds = jdbcTemplate.getDataSource();
        List listado = new ArrayList();
        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator('.');
        dfs.setGroupingSeparator(',');
        DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
        df1.setGroupingSize(3);
        int num_prog = 0;
        int num_no_prog = 0;
        String SQL = "";
        if (servicio.equals("E"))
            SQL = 
"select distinct to_char(a.fec_dest,'dd/mm/yyyy') fec_dest, a.cod_punt_dest," + 
  " nvl(a.cod_ruta_dest,0) cod_ruta_dest, a.cod_clie," + 
  " a.tip_orig, a.tip_dest,     decode(a.ind_prog,0,'NP',' ')  ind, b.des_punt," + 
  " a.nse_punt_dest, a.mon_efec, a.mon_cheq," + 
  "     decode(a.tip_unid_mone,'1','US$','2','S/.','S/.') tipo, nvl(a.ind_prog,1) ind_prog" + 
  " ,a.cod_seri_cmpb ,a.num_cmpb" + " from tv_cmpb_serv a, ve_punto b where" + 
  " a.fec_dest between to_date(?,'DD/MM/YYYY') and" + 
  " to_date(?,'DD/MM/YYYY')" + " and a.cod_clie = ?" + 
  " and a.cod_sucu_htb_cnta = ?" + " and a.tip_docu_cmpb = 'CS'" + 
  " and a.tip_punt_dest in ('1','4','12')" + " and a.tip_form_tras = '1'" + 
  " and a.est_docu != '11'" + " and a.cod_punt_dest = b.cod_punt" + 
  " and a.cod_clie = b.cod_clie_grup" + " order by    b.des_punt,1";
        else if (servicio.equals("R"))
            SQL = 
"select       distinct to_char(a.fec_orig,'dd/mm/yyyy') fec_dest," + 
  " a.cod_punt_orig cod_punt_dest, nvl(a.cod_ruta_orig,0) cod_ruta_dest, a.cod_clie , a.tip_orig, a.tip_dest," + 
  " decode(a.ind_prog,0,'NP',' ')  ind, b.des_punt, a.nse_punt_orig, a.cod_seri_cmpb," + 
  " a.mon_efec, a.mon_cheq, decode(a.tip_unid_mone,'1','US$','2','S/.','S/.') tipo, nvl(a.ind_prog,1) ind_prog" + 
  " ,a.cod_seri_cmpb ,a.num_cmpb" + 
  " from        tv_cmpb_serv a, ve_punto b where" + 
  " a.fec_orig between to_date(?,'DD/MM/YYYY') and" + 
  " to_date(?,'DD/MM/YYYY')" + " and a.cod_clie = ?" + 
  " and a.tip_docu_cmpb = 'CS'" + " and a.cod_seri_cmpb != 'I01'" + 
  " and a.tip_punt_orig in ('1','4','12')" + " and a.tip_form_tras = '2'" + 
  " and a.est_docu != '11'" + " and a.cod_sucu_htb_cnta = ?" + 
  " and a.cod_punt_orig = b.cod_punt" + " and a.cod_clie = b.cod_clie_grup" + 
  " order by    b.des_punt,1";
        else
            SQL = 
"select       distinct to_char(a.fec_orig,'dd/mm/yyyy') fec_dest," + 
  " a.cod_punt_orig cod_punt_dest, nvl(a.cod_ruta_orig,0) cod_ruta_dest, a.cod_clie , a.tip_orig, a.tip_dest," + 
  " a.cod_punt_dest, a.cod_seri_cmpb, a.mon_efec, a.mon_cheq," + 
  " decode(a.ind_prog,0,'NP',' ')  ind, b.des_punt, a.nse_punt_orig," + 
  " decode(a.tip_unid_mone,'1','US$','2','S/.','S/.') tipo, nvl(a.ind_prog,1) ind_prog" + 
  " ,a.cod_seri_cmpb ,a.num_cmpb" + 
  " from        tv_cmpb_serv a, ve_punto b where" + 
  "     a.fec_orig between to_date(?,'DD/MM/YYYY') and" + 
  " to_date(?,'DD/MM/YYYY')" + " and a.cod_clie = ?" + 
  " and a.cod_sucu_htb_cnta = ?" + " and a.tip_docu_cmpb = 'CS'" + 
  " and (a.tip_punt_orig in ('1','4','12') or a.tip_punt_dest in ('1','4','12'))" + 
  " and nvl(cod_clie_cnta,0) = 0" + " and a.est_docu != '11'" + 
  " and a.cod_punt_orig = b.cod_punt" + " order by    b.des_punt, 1";
        try {
            CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            conn = ds.getConnection();
            pstmt = conn.prepareStatement(SQL);
            pstmt.setString(1, fechaDesde);
            pstmt.setString(2, fechaHasta);
            pstmt.setString(3, cliente);
            pstmt.setString(4, sucursal);
            rs = pstmt.executeQuery();
            RutaServicioBean ruta = null;
            while (rs.next()) {
                ruta = new RutaServicioBean();
                ruta.setFecha("'" + rs.getString("fec_dest"));
                ruta.setPunto(rs.getString("des_punt"));
                ruta.setHoraLlegada(getHora(rs.getString("fec_dest"), 
                                            rs.getString("cod_ruta_dest"), 
                                            rs.getString("cod_punt_dest")));
                ruta.setRuta(rs.getString("cod_ruta_dest"));
                if (rs.getDouble("mon_efec") > 0) {
                    ruta.setMonto(df1.format(rs.getDouble("mon_efec")));
                } else {
                    ruta.setMonto(df1.format(rs.getDouble("mon_cheq")));
                }
                ruta.setProg(rs.getString("ind"));
                ruta.setTipo(rs.getString("tipo"));
                if (servicio.equals("E") && 
                    rs.getString("tip_orig").equals("2") && 
                    rs.getString("tip_dest").equals("1") && 
                    rs.getString("ind_prog").equals("1"))
                    num_prog = num_prog + 1;
                if (servicio.equals("R") && 
                    (!rs.getString("tip_orig").equals("1") || 
                     !rs.getString("tip_dest").equals("1")) && 
                    rs.getString("ind_prog").equals("1"))
                    num_prog = num_prog + 1;
                if (servicio.equals("D") && 
                    rs.getString("tip_orig").equals("1") && 
                    rs.getString("tip_dest").equals("1") && 
                    rs.getString("ind_prog").equals("1"))
                    num_prog = num_prog + 1;
                if (servicio.equals("E") && 
                    rs.getString("tip_orig").equals("2") && 
                    rs.getString("tip_dest").equals("1") && 
                    rs.getString("ind_prog").equals("0"))
                    num_no_prog = num_no_prog + 1;
                if (servicio.equals("R") && 
                    (!rs.getString("tip_orig").equals("1") || 
                     !rs.getString("tip_dest").equals("1")) && 
                    rs.getString("ind_prog").equals("0"))
                    num_no_prog = num_no_prog + 1;
                if (servicio.equals("D") && 
                    rs.getString("tip_orig").equals("1") && 
                    rs.getString("tip_dest").equals("1") && 
                    rs.getString("ind_prog").equals("0"))
                    num_no_prog = num_no_prog + 1;
                ruta.setSerie(rs.getString("cod_seri_cmpb"));
                ruta.setComprobante(rs.getString("num_cmpb"));
                listado.add(ruta);
            }
            if (listado.size() > 1) {
                listado.add(String.valueOf(num_prog));
                listado.add(String.valueOf(num_no_prog));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close ResultSet, PreparedStatement and Connection
                rs.close();
                pstmt.close();
                conn.close();
            } catch (Exception ex) { // Catch All exceptions
                ex.printStackTrace();

            }
        }
        return listado;
    }  **/

   
  /** NUEVO NSC 19-08-09 **/
   public List getServiciosAgencia(final String servicio, final String fechaDesde, 
                                   final String fechaHasta, final String cliente, 
                                   final String sucursal) {
        
        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator('.');
        dfs.setGroupingSeparator(',');
        final DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
        df1.setGroupingSize(3);
        
        final List listagen = new ArrayList();
        logger.info("Obtener saldos reales por cuenta.");
        String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_SERV_AGEN(?,?,?,?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        
        CallableStatementCallback cs = new CallableStatementCallback() {
        public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
        SQLException {
            arg0.setString(1, sucursal);
            arg0.setString(2, cliente);
            arg0.setString(3, servicio);
            arg0.setString(4, fechaDesde);
            arg0.setString(5, fechaHasta);
            arg0.registerOutParameter(6, OracleTypes.CURSOR);
            arg0.registerOutParameter(7, OracleTypes.NUMERIC);            
            arg0.registerOutParameter(8, OracleTypes.VARCHAR);
            arg0.execute();
            logger.error(arg0.getString(8));
            int num_prog = 0;
            int num_no_prog = 0;
            ResultSet rs = (ResultSet)arg0.getObject(6);
            while(rs.next()){
                 RutaServicioBean ruta = new RutaServicioBean();
                 /*ruta.setFecha("'" + rs.getString("fec_dest"));
                 ruta.setPunto(rs.getString("des_punt"));
                 ruta.setHoraLlegada(getHora(rs.getString("fec_dest"), 
                                             rs.getString("cod_ruta_dest"), 
                                             rs.getString("cod_punt_dest")));
                                             */
                 ruta.setRuta(rs.getString("cod_ruta_dest"));
                 if (rs.getDouble("mon_efec") > 0) {
                     //ruta.setMonto(df1.format(rs.getDouble("mon_efec")));
                 } else {
                     //ruta.setMonto(df1.format(rs.getDouble("mon_cheq")));
                 }
                 ruta.setProg(rs.getString("ind"));
                 ruta.setTipo(rs.getString("tipo"));
                 ruta.setTipUnidMone(rs.getString("tip_unid_mone"));
                 if (servicio.equals("E") && 
                     rs.getString("tip_orig").equals("2") && 
                     rs.getString("tip_dest").equals("1") && 
                     rs.getString("ind_prog").equals("1"))
                     num_prog = num_prog + 1;
                 if (servicio.equals("R") && 
                     (!rs.getString("tip_orig").equals("1") || 
                      !rs.getString("tip_dest").equals("1")) && 
                     rs.getString("ind_prog").equals("1"))
                     num_prog = num_prog + 1;
                 if (servicio.equals("D") && 
                     rs.getString("tip_orig").equals("1") && 
                     rs.getString("tip_dest").equals("1") && 
                     rs.getString("ind_prog").equals("1"))
                     num_prog = num_prog + 1;
                 if (servicio.equals("E") && 
                     rs.getString("tip_orig").equals("2") && 
                     rs.getString("tip_dest").equals("1") && 
                     rs.getString("ind_prog").equals("0"))
                     num_no_prog = num_no_prog + 1;
                 if (servicio.equals("R") && 
                     (!rs.getString("tip_orig").equals("1") || 
                      !rs.getString("tip_dest").equals("1")) && 
                     rs.getString("ind_prog").equals("0"))
                     num_no_prog = num_no_prog + 1;
                 if (servicio.equals("D") && 
                     rs.getString("tip_orig").equals("1") && 
                     rs.getString("tip_dest").equals("1") && 
                     rs.getString("ind_prog").equals("0"))
                     num_no_prog = num_no_prog + 1;
                 ruta.setSerie(rs.getString("cod_seri_cmpb"));
                 ruta.setComprobante(rs.getString("num_cmpb"));
                 listagen.add(ruta);   
             }
            if (listagen.size() > 1) {
                listagen.add(String.valueOf(num_prog));
                listagen.add(String.valueOf(num_no_prog));
            }
             return listagen;
        }
     };
     this.jdbcTemplate.execute(SQL, cs);
     return listagen;
   } 
   
    public List getServiciosAgenciaMultiple(final String servicio, final String listaCodPuntos, final String fechaDesde, 
                                    final String fechaHasta, final String cliente, 
                                    final String sucursal) {
         
         DecimalFormatSymbols dfs = new DecimalFormatSymbols();
         dfs.setDecimalSeparator('.');
         dfs.setGroupingSeparator(',');
         final DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
         String format = "dd/MM/yyyy";
         final SimpleDateFormat sdf = new SimpleDateFormat(format);
         sdf.setLenient(false);         
         
         df1.setGroupingSize(3);
         
         final List listagen = new ArrayList();
         logger.info("Obtener el servicio de Agencia por punto.");
         String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_SERV_AGEN_MULT(?,?,?,?,?, ?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
         
         CallableStatementCallback cs = new CallableStatementCallback() {
         public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
         SQLException {
             arg0.setString(1, sucursal);
             arg0.setString(2, cliente);
             arg0.setString(3, servicio);
             arg0.setString(4, listaCodPuntos);
             arg0.setString(5, fechaDesde);
             arg0.setString(6, fechaHasta);
             arg0.registerOutParameter(7, OracleTypes.CURSOR);
             arg0.registerOutParameter(8, OracleTypes.NUMERIC);            
             arg0.registerOutParameter(9, OracleTypes.VARCHAR);
             arg0.registerOutParameter(10, OracleTypes.VARCHAR);
             arg0.execute();
             logger.info(arg0.getString(9));
             logger.info("SQL: "+arg0.getString(10));
             int num_prog = 0;
             int num_no_prog = 0;
             ResultSet rs = (ResultSet)arg0.getObject(7);
             while(rs.next()){
                  RutaServicioBean ruta = new RutaServicioBean();
                  ruta.setTipoServ(rs.getString("tipo_serv"));
                  ruta.setSerie(rs.getString("cod_seri_cmpb"));
                  ruta.setComprobante(rs.getString("num_cmpb"));                  
                  ruta.setFechaOrigen(rs.getString("fec_orig"));
                  ruta.setPuntoOrigen(rs.getString("des_punt_orig"));
                  if (rs.getString("cod_punt_orig")!=null && !rs.getString("cod_punt_orig").equals("0")){
                      ruta.setCodPuntoOrigen(rs.getString("cod_punt_orig"));
                  }
                  else{
                      ruta.setCodPuntoOrigen("");    
                  }
                  ruta.setPtoOrigClienteDesc(rs.getString("bnc_punt_orig"));
                  ruta.setPtoOrigDesc(rs.getString("pnt_orig_desc"));
                  ruta.setFechaDestino(rs.getString("fec_dest"));
                  try {
                      ruta.setFechaDestinoDate(sdf.parse(rs.getString("fec_dest")));
                  }
                  catch (Exception e) {
                      logger.info(e);
                      logger.info(ruta.toString());
                  }
                  ruta.setPuntoDestino(rs.getString("des_punt_dest"));                  
                  if (rs.getString("cod_punt_dest")!=null && !rs.getString("cod_punt_dest").equals("0")){
                      ruta.setCodPuntoDestino(rs.getString("cod_punt_dest"));
                  }
                  else {
                      ruta.setCodPuntoDestino("");    
                  }
                  ruta.setPtoDestClienteDesc(rs.getString("bnc_punt_dest"));;
                  ruta.setPtoDestDesc(rs.getString("pnt_dest_desc"));
                  ruta.setRuta(rs.getString("cod_ruta_dest"));
                  ruta.setCodTipUnidMone(rs.getString("cod_tipo_uni_mone"));
                  ruta.setTipUnidMone(rs.getString("tipo_uni_mone"));
                  if (rs.getDouble("mon_efec") > 0) {
                      ruta.setMontoFormat(df1.format(rs.getDouble("mon_efec")));
                      ruta.setMonto( new BigDecimal(rs.getString("mon_efec")==null?"0":rs.getString("mon_efec")));                       
                  } else {
                      ruta.setMontoFormat(df1.format(rs.getDouble("mon_cheq")));                      
                      ruta.setMonto( new BigDecimal(rs.getString("mon_cheq")==null?"0":rs.getString("mon_cheq")));                       
                  }
                  ruta.setHoraInicioEjecutado(rs.getString("hora_lleg_ejec"));
                  ruta.setHoraFinEjecutado(rs.getString("hora_sali_ejec"));
                  ruta.setHoraInicioProg(rs.getString("hor_inic_prog"));
                  ruta.setHoraFinProg(rs.getString("hor_finl_prog"));                  
                  ruta.setEstado(rs.getString("des_estd"));
                  ruta.setProg(rs.getString("ind"));
                  ruta.setCodMatriz(rs.getString("codMatriz"));
                  ruta.setDesMatriz(rs.getString("desMatriz"));
                  ruta.setDesBancMatriz(rs.getString("desBancMatriz"));
                  /*
                  if (servicio.equals("E") && 
                      rs.getString("tip_orig").equals("2") && 
                      rs.getString("tip_dest").equals("1") && 
                      rs.getString("ind_prog").equals("1"))
                      num_prog = num_prog + 1;
                  if (servicio.equals("R") && 
                      (!rs.getString("tip_orig").equals("1") || 
                       !rs.getString("tip_dest").equals("1")) && 
                      rs.getString("ind_prog").equals("1"))
                      num_prog = num_prog + 1;
                  if (servicio.equals("D") && 
                      rs.getString("tip_orig").equals("1") && 
                      rs.getString("tip_dest").equals("1") && 
                      rs.getString("ind_prog").equals("1"))
                      num_prog = num_prog + 1;
                  if (servicio.equals("E") && 
                      rs.getString("tip_orig").equals("2") && 
                      rs.getString("tip_dest").equals("1") && 
                      rs.getString("ind_prog").equals("0"))
                      num_no_prog = num_no_prog + 1;
                  if (servicio.equals("R") && 
                      (!rs.getString("tip_orig").equals("1") || 
                       !rs.getString("tip_dest").equals("1")) && 
                      rs.getString("ind_prog").equals("0"))
                      num_no_prog = num_no_prog + 1;
                  if (servicio.equals("D") && 
                      rs.getString("tip_orig").equals("1") && 
                      rs.getString("tip_dest").equals("1") && 
                      rs.getString("ind_prog").equals("0"))
                      num_no_prog = num_no_prog + 1;
                  ruta.setHoraLlegada(getHora(rs.getString("fec_dest"), 
                                              rs.getString("cod_ruta_dest"), 
                                              rs.getString("cod_punt_dest")));
                  */
                  listagen.add(ruta);   
              }
             //if (listagen.size() > 1) {
             //    listagen.add(String.valueOf(num_prog));
             //    listagen.add(String.valueOf(num_no_prog));
             //}
              return listagen;
         }
      };
      this.jdbcTemplate.execute(SQL, cs);
      return listagen;
    }    
   
    private String getHora(String fechaDestino, String ruta, String punto) {
        String SQL = 
            "select to_char(hor_lleg_punt,'hh24:mi') hora from tv_hoja_ruta_deta" + 
            " where fec_prgn = to_date(?,'dd/mm/yyyy')" + " and cod_ruta = ?" + 
            " and cod_punt = ?";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { fechaDestino, ruta, punto };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "";
        }
    }
   /** Metodo Desfasado NSC 23-09-09 
    public List getEnvio(String fechaDesde, String fechaHasta, 
                         String sucursal) {
        String SQL = 
            "select to_char(a.fec_dest,'dd/mm/yyyy') fecha_destino," + 
            "        a.cod_punt_dest codigo_punto," + 
            "        c.des_punt des_punto," + 
            "        a.cod_seri_cmpb serie," + 
            "        a.num_cmpb numero," + 
            "        a.cod_bove moneda," + 
            "        a.mon_efec monto" + 
            " from   tv_cmpb_serv a, ve_cliente b, ve_punto c" + 
            " where  a.fec_dest > to_date(?,'DD/MM/YYYY')" + 
            " and    a.fec_dest < to_date(?,'DD/MM/YYYY')" + 
            " and    a.cod_punt_dest = c.cod_punt" + 
            " and    b.cod_clie = c.cod_clie_grup" + 
            " and    b.cod_clie in (138,149,1604,1605)" + 
            " and    a.tip_orig+0 = 2" + 
            " and    a.tip_dest+0 = 1" + 
            " and    a.cod_sucu_htb = ?" 
            + " and    a.est_docu <> '11'";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = new Object[] { fechaDesde, fechaHasta, sucursal };
        return jdbcTemplate.query(SQL, params, new EnvioMapper());
    }

    protected class EnvioMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            DecimalFormatSymbols dfs = new DecimalFormatSymbols();
            dfs.setDecimalSeparator('.');
            dfs.setGroupingSeparator(',');
            DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
            df1.setGroupingSize(3);
            //Establecer los atributos en la entidad 
            ComprobanteServicioBean cs = new ComprobanteServicioBean();
            cs.setFechaDestino(rs.getString("fecha_destino"));
            cs.setPuntoDestino(rs.getString("codigo_punto"));
            cs.setDesPunto(rs.getString("des_punto"));
            cs.setSerie(rs.getString("serie"));
            cs.setNumero(rs.getString("numero"));
            if (rs.getString("moneda").equals("1"))
                cs.setTipoUnidad("BILLETES SOLES");
            else if (rs.getString("moneda").equals("2"))

                cs.setTipoUnidad("MONEDAS SOLES");
            else if (rs.getString("moneda").equals("3"))

                cs.setTipoUnidad("BILLETES DOLARES");
            else
                cs.setTipoUnidad("");
            cs.setValor(df1.format(rs.getDouble("monto")));
            return cs;
        }
    } **/

    /** NUEVO NSC 23-09-09 **/
     public List getEnvio(final String fechaDesde, final String fechaHasta, 
                          final String sucursal, final String cliente){

          logger.info("Obtener lista de envios de WONG");
          String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_ENVIO(?,?,?,?,?,?,?) }";
      
          DecimalFormatSymbols dfs = new DecimalFormatSymbols();
          dfs.setDecimalSeparator('.');
          dfs.setGroupingSeparator(',');
          final DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
          df1.setGroupingSize(3);

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
          final List listadenom = new ArrayList();
          CallableStatementCallback cas = new CallableStatementCallback() {
          public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
          SQLException {
              arg0.setString(1, sucursal);
              arg0.setString(2, cliente);
              arg0.setString(3, fechaDesde);
              arg0.setString(4, fechaHasta);
              arg0.registerOutParameter(5, OracleTypes.CURSOR);
              arg0.registerOutParameter(6, OracleTypes.NUMERIC);            
              arg0.registerOutParameter(7, OracleTypes.VARCHAR);
              arg0.execute();
              logger.error(arg0.getString(7));
              ResultSet rs = (ResultSet)arg0.getObject(5);
              while(rs.next()){
                   ComprobanteServicioBean cs = new ComprobanteServicioBean();
                   cs.setFechaDestino(rs.getString("fecha_destino"));
                   cs.setPuntoDestino(rs.getString("codigo_punto"));
                   cs.setDesPunto(rs.getString("des_punto"));
                   cs.setSerie(rs.getString("serie"));
                   cs.setNumero(rs.getString("numero"));
                   cs.setTipoUnidad(rs.getString("des_bove"));
                   cs.setValor(df1.format(rs.getDouble("monto")));
                   listadenom.add(cs);                               
               }
               return listadenom;
          }
       };
       this.jdbcTemplate.execute(SQL, cas);
       return listadenom;
    }

    /** Metodo Desfasado NSC 23-09-09  
    public List getRecojo(String fechaDesde, String fechaHasta, 
                          String sucursal) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        DataSource ds = jdbcTemplate.getDataSource();
        List listado = new ArrayList();
        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator('.');
        dfs.setGroupingSeparator(',');
        DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
        df1.setGroupingSize(3);
        String SQL = 
            "select to_char(a.fec_orig,'dd/mm/yyyy') fecha_recojo," + "        to_char(a.fec_proc_aper,'dd/mm/yyyy') fecha_proceso," + 
            "        a.tip_docu_cmpb tipo," + 
            "        a.cod_seri_cmpb Serie," + "        a.num_cmpb Numero," + 
            "        a.cod_punt_orig Codigo_punto," + 
            "        c.des_punt Punto_recojo," + "        a.cod_bove Moneda," + 
            "        a.cod_clie_cnta Codigo_cliente," + 
            "        a.mon_efec Monto_contiene," + 
            "        sum(d.mon_deno) dice_contener" + 
            " from   tv_cmpb_serv a, ve_cliente b, ve_punto c," + 
            "        ac_cmpb_deno d" + 
            " where  a.fec_orig >= to_date(?,'DD/MM/YYYY')" + 
            " and    a.fec_orig <= to_date(?,'DD/MM/YYYY')" + 
            " and    a.cod_punt_orig = c.cod_punt" + 
            " and    b.cod_clie = c.cod_clie_grup" + 
            " and    b.cod_clie+0 in (138,149, 1604, 1605)" + 
            " and    a.tip_orig+0 = 1" + " and    a.tip_dest+0 = 3" + 
            " and    a.cod_sucu_htb = ?" + " and    a.est_docu <> '11'" + 
            " and    a.num_cmpb = d.num_cmpb" + 
            " and    a.cod_seri_cmpb = d.cod_seri_cmpb" + 
            " and    a.tip_docu_cmpb = d.tip_docu_cmpb" + 
            " group by a.fec_orig, a.fec_proc_aper, a.tip_docu_cmpb, a.cod_seri_cmpb," + 
            "          a.num_cmpb, a.cod_punt_orig, c.des_punt, a.cod_bove, a.cod_clie_cnta," + 
            "          b.nom_clie, a.mon_efec";
        try {
            CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            conn = ds.getConnection();
            pstmt = conn.prepareStatement(SQL);
            pstmt.setString(1, fechaDesde);
            pstmt.setString(2, fechaHasta);
            pstmt.setString(3, sucursal);
            rs = pstmt.executeQuery();
            ComprobanteServicioBean cs = null;
            while (rs.next()) {
                cs = new ComprobanteServicioBean();
                cs.setFechaDestino(rs.getString("fecha_recojo"));
                cs.setFecha(rs.getString("fecha_proceso"));
                cs.setSerie(rs.getString("Serie"));
                cs.setNumero(rs.getString("Numero"));
                cs.setPuntoDestino(rs.getString("Codigo_punto"));
                cs.setDesPunto(rs.getString("Punto_recojo"));
                if (rs.getString("moneda").equals("1"))
                    cs.setTipoUnidad("BILLETES SOLES");
                else if (rs.getString("moneda").equals("2"))

                    cs.setTipoUnidad("MONEDAS SOLES");
                else if (rs.getString("moneda").equals("3"))

                    cs.setTipoUnidad("BILLETES DOLARES");
                else
                    cs.setTipoUnidad("");
                cs.setCliente(rs.getString("Codigo_cliente"));
                ClienteBean cliente = 
                    clienteDAO.getCliente(rs.getString("codigo_cliente"));
                if (cliente != null) {
                    cs.setNombreCliente(cliente.getNombre());
                }
                cs.setCuenta(cuentaDAO.getDetaCuentaCliente(rs.getString("numero"), 
                                                            rs.getString("serie"), 
                                                            rs.getString("tipo")));
                cs.setContiene(rs.getString("Monto_contiene"));
                cs.setDice(rs.getString("dice_contener"));
                cs.setDiferencia(obtenerDiferencia(rs.getString("Numero"), 
                                                   rs.getString("Serie"), 
                                                   rs.getString("tipo")));
                listado.add(cs);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close ResultSet, PreparedStatement and Connection
                rs.close();
                pstmt.close();
                conn.close();
            } catch (Exception ex) { // Catch All exceptions
                ex.printStackTrace();
            }
        }
        return listado;
    } **/

    /** NUEVO NSC 23-09-09 **/
     public List getRecojo(final String fechaDesde, final String fechaHasta, 
                           final String sucursal, final String cliente){

          logger.info("Obtener lista de recojos de WONG");
          String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_RECOJO(?,?,?,?,?,?,?) }";
      
          DecimalFormatSymbols dfs = new DecimalFormatSymbols();
          dfs.setDecimalSeparator('.');
          dfs.setGroupingSeparator(',');
          final DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
          df1.setGroupingSize(3);

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
          final List listadenom = new ArrayList();
          CallableStatementCallback cas = new CallableStatementCallback() {
          public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
          SQLException {
              arg0.setString(1, sucursal);
              arg0.setString(2, cliente);
              arg0.setString(3, fechaDesde);
              arg0.setString(4, fechaHasta);
              arg0.registerOutParameter(5, OracleTypes.CURSOR);
              arg0.registerOutParameter(6, OracleTypes.NUMERIC);            
              arg0.registerOutParameter(7, OracleTypes.VARCHAR);
              arg0.execute();
              logger.error(arg0.getString(7));
              ResultSet rs = (ResultSet)arg0.getObject(5);
              while(rs.next()){
                   ComprobanteServicioBean cs = new ComprobanteServicioBean();
                   cs.setFechaDestino(rs.getString("fecha_recojo"));
                   cs.setFecha(rs.getString("fecha_proceso"));
                   cs.setSerie(rs.getString("Serie"));
                   cs.setNumero(rs.getString("Numero"));
                   cs.setPuntoDestino(rs.getString("Codigo_punto"));
                   cs.setDesPunto(rs.getString("Punto_recojo"));
                   cs.setTipoUnidad(rs.getString("des_bove"));
                   cs.setCliente(rs.getString("Codigo_cliente"));
                   cs.setNombreCliente(rs.getString("nom_clie"));
                   cs.setCuenta(rs.getString("cod_cuenta"));
                   cs.setContiene(rs.getString("Monto_contiene"));
                   cs.setDice(rs.getString("dice_contener"));
                   cs.setDiferencia(rs.getString("diferencia"));
                   cs.setNumActa(rs.getString("num_acta"));
                   listadenom.add(cs);                               
               }
               return listadenom;
          }
       };
       this.jdbcTemplate.execute(SQL, cas);
       return listadenom;
    }

    /*
    private String obtenerDiferencia(String numero, String serie, 
                                     String tipo) {
        double xmon_dife = 0;
        String xnum_acta = "";
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        DataSource ds = jdbcTemplate.getDataSource();
        String SQL = 
            "select tip_dife, mon_dife, num_acta from ac_acta" + " where  num_cmpb = ? and    cod_seri_cmpb = ?" + 
            " and    tip_docu_cmpb = ?  and    mon_dife > 0";
        try {
            CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            conn = ds.getConnection();
            pstmt = conn.prepareStatement(SQL);
            pstmt.setString(1, numero);
            pstmt.setString(2, serie);
            pstmt.setString(3, tipo);
            rs = pstmt.executeQuery();
            while (rs.next()) {
                xmon_dife = rs.getDouble("mon_dife");
                xnum_acta = rs.getString("num_acta");
                if (rs.getString("tip_dife").equals("F"))
                    xmon_dife = xmon_dife * -1;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close ResultSet, PreparedStatement and Connection
                if(rs!=null) rs.close();
                if(pstmt!=null) pstmt.close();
                if(conn!=null) conn.close();
            } catch (Exception ex) { // Catch All exceptions
                ex.printStackTrace();
            }
        }
        return String.valueOf(xmon_dife);
    }
    */
    /** Metodo Desfasado NSC 26-08-09 
    public List getResultadoApertuConso(String fechaDesde, String cliente, 
                                        String cuenta, String boveda, 
                                        String sucursal) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        DataSource ds = jdbcTemplate.getDataSource();
        List listado = new ArrayList();
        double totalEfectivo = 0;
        double ld_apertura = 0;
        double ld_diferencia = 0;
        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator('.');
        dfs.setGroupingSeparator(',');
        DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
        df1.setGroupingSize(3);
        try {
            conn = ds.getConnection();
            String SQL = 
                "select cod_seri_cmpb, num_cmpb, nvl(mon_efec,0) mon_efec, b.des_punt, nvl(tip_ingr,0) tip_ingr " + 
                " from tv_cmpb_serv a , ve_punto b where" + 
                " fec_proc_aper = to_date(?,'dd/mm/yyyy') and" + 
                " cod_clie_cnta +0 = ? and" + " cod_cnta =  ? and" + 
                " cod_bove =  ? and" + " cod_sucu_htb_cnta = ? and " + 
                " tip_dest = '3' and tip_form_tras = '2' and tip_orig in ('1','2') and" + 
                " est_recu >= '2' and est_docu <> '11' and" + 
                " b.cod_punt = a.cod_punt_orig" + 
                " order by cod_seri_cmpb, num_cmpb";
                
            CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            pstmt = conn.prepareStatement(SQL);
            pstmt.setString(1, fechaDesde);
            pstmt.setString(2, cliente);
            pstmt.setString(3, cuenta);
            pstmt.setString(4, boveda);
            pstmt.setString(5, sucursal);

            rs = pstmt.executeQuery();
            ComprobanteServicioBean cs = null;
            while (rs.next()) {
                String valor = montoDeno(rs.getString(2), rs.getString(1));
                if (!((rs.getDouble("tip_ingr") == 1 || 
                       rs.getDouble("tip_ingr") == 2) && 
                      rs.getDouble("mon_efec") == 0 && 
                      rs.getDouble("mon_efec") == Double.parseDouble(valor))) {
                    cs = new ComprobanteServicioBean();
                    cs.setSerie(rs.getString(1));
                    cs.setNumero(rs.getString(2));
                    cs.setDesPunto(rs.getString(4));
                    cs.setTotal2(df1.format(Double.parseDouble(rs.getString(3))));
                    cs.setValor2(df1.format(Double.parseDouble(valor)));
                    double nuevo = Double.parseDouble(valor);
                    cs.setDiferencia(df1.format(Math.abs(rs.getDouble("mon_efec") - 
                                                         nuevo)));
                    totalEfectivo = totalEfectivo + rs.getDouble(3);
                    ld_apertura = ld_apertura + nuevo;
                    ld_diferencia = ld_diferencia + (nuevo - rs.getDouble(3));
                    if (rs.getDouble("mon_efec") > nuevo)
                        cs.setEstado("Faltante");
                    else {
                        if (rs.getDouble("mon_efec") < nuevo)
                            cs.setEstado("Sobrante");
                        else
                            cs.setEstado("");
                    }
                    listado.add(cs);
                }
            }
            listado.add(df1.format(totalEfectivo));
            listado.add(df1.format(ld_apertura));
            listado.add(df1.format(ld_diferencia));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close ResultSet, PreparedStatement and Connection
                rs.close();
                pstmt.close();
                conn.close();
            } catch (Exception ex) { // Catch All exceptions
                ex.printStackTrace();
            }
        }
        return listado;

    }  **/
    
    /** NUEVO NSC 26-08-09 **/
     public List getResultadoApertuConso(final String sucursal, final String cliente,
                                         final String cuenta, final String boveda, 
                                         final String codPunt, final String tipOper,                                          
                                         final String fechaDesde, final String fechaHasta, final String isAtmActive ) {
        
        final DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator('.');
        dfs.setGroupingSeparator(',');
        final DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
        df1.setGroupingSize(3);
        final List listaresu = new ArrayList();
    
        logger.info("Obtener Resultado de Apertura Consolidada");
        String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_APER_CONS(?,?,?,?,?, ?,?,?,?,?, ?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        
        CallableStatementCallback cas = new CallableStatementCallback() {
     
        public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
        SQLException {
            arg0.setString(1, sucursal);
            arg0.setString(2, cliente);
            arg0.setString(3, cuenta);
            arg0.setString(4, boveda);
            arg0.setString(5, codPunt);                
            arg0.setString(6, tipOper);
            arg0.setString(7, fechaDesde);
            arg0.setString(8, fechaHasta);
            arg0.setString(9, isAtmActive);
            arg0.registerOutParameter(10, OracleTypes.CURSOR);
            arg0.registerOutParameter(11, OracleTypes.NUMERIC);            
            arg0.registerOutParameter(12, OracleTypes.VARCHAR); 
            arg0.execute();
            logger.info(arg0.getString(12));
            double totalEfectivo = 0;
            double ld_apertura = 0;
            double ld_diferencia = 0; 
            ResultSet rs = (ResultSet)arg0.getObject(10);
            while(rs.next()){
                String valor = montoDeno(rs.getString("num_cmpb"), rs.getString("cod_seri_cmpb"), boveda);
                if (!((rs.getDouble("tip_ingr") == 1 || 
                       rs.getDouble("tip_ingr") == 2) && 
                      rs.getDouble("mon_efec") == 0 && 
                      rs.getDouble("mon_efec") == Double.parseDouble(valor))) {
                    
                    ResultadoAperturaBean resultAperBean = new ResultadoAperturaBean();                    
                    
                    resultAperBean.setTipo(rs.getString("tipo"));                    
                    resultAperBean.setCodSeriCmpb(rs.getString("cod_seri_cmpb"));
                    resultAperBean.setTipDocuCmpb(rs.getString("tip_docu_cmpb"));
                    resultAperBean.setNumCmpb(rs.getBigDecimal("num_cmpb"));
                    resultAperBean.setPunto(rs.getString("punto1"));
                    resultAperBean.setMonEfec(rs.getBigDecimal("mon_efec"));
                    resultAperBean.setTipIngr(rs.getBigDecimal("tip_ingr"));
                    resultAperBean.setApertura(rs.getBigDecimal("apertura"));
                    resultAperBean.setDife(rs.getBigDecimal("dife"));
                    resultAperBean.setPiezas(rs.getBigDecimal("piezas"));                    
                    resultAperBean.setCodClieGrup(rs.getBigDecimal("cod_clie_grup"));                    
                    resultAperBean.setTipoCliente(rs.getString("tipo_cliente"));
                    resultAperBean.setTipoAtm(rs.getString("tipo_atm"));
                    resultAperBean.setParamFecha(rs.getString("param_fecha"));
                    resultAperBean.setTotal2(df1.format(Double.parseDouble(rs.getString("mon_efec"))));                    
                    resultAperBean.setValor2(df1.format(Double.parseDouble(valor)));
                    resultAperBean.setFecProc(rs.getString("fec_proc"));
                    resultAperBean.setFecProcAper(rs.getString("fec_proc_aper"));
                    double nuevo = Double.parseDouble(valor);
                    resultAperBean.setDiferencia(df1.format(Math.abs(rs.getDouble("mon_efec") - nuevo)));
                    totalEfectivo = totalEfectivo + rs.getDouble("mon_efec");
                    ld_apertura = ld_apertura + nuevo;
                    ld_diferencia = ld_diferencia + (nuevo - rs.getDouble("mon_efec"));
                    if (rs.getDouble("mon_efec") > nuevo){
                        resultAperBean.setEstado("Faltante");
                        resultAperBean.setDesActa("Acta");
                    }else if (rs.getDouble("mon_efec") < nuevo){                    
                        resultAperBean.setEstado("Sobrante");
                        resultAperBean.setDesActa("Acta");                        
                    }else
                        resultAperBean.setEstado("");
                                       
                    
                    /*ComprobanteServicioBean cs = new ComprobanteServicioBean();
                    cs.setSerie(rs.getString("cod_seri_cmpb"));
                    cs.setNumero(rs.getString("num_cmpb"));
                    cs.setDesPunto(rs.getString("punto1"));
                    cs.setTotal2(df1.format(Double.parseDouble(rs.getString("mon_efec"))));                    
                    cs.setValor2(df1.format(Double.parseDouble(valor)));
                    cs.setFechaProc(rs.getString("fec_proc"));
                    double nuevo = Double.parseDouble(valor);
                    cs.setDiferencia(df1.format(Math.abs(rs.getDouble("mon_efec") - nuevo)));
                    totalEfectivo = totalEfectivo + rs.getDouble("mon_efec");
                    ld_apertura = ld_apertura + nuevo;
                    ld_diferencia = ld_diferencia + (nuevo - rs.getDouble("mon_efec"));
                    if (rs.getDouble("mon_efec") > nuevo)
                        cs.setEstado("Faltante");
                    else {
                        if (rs.getDouble("mon_efec") < nuevo)
                            cs.setEstado("Sobrante");
                        else
                            cs.setEstado("");
                    }*/
                    
                    listaresu.add(resultAperBean);
                }
             }
            listaresu.add(df1.format(totalEfectivo));
            listaresu.add(df1.format(ld_apertura));
            listaresu.add(df1.format(ld_diferencia));
            return listaresu;
        }
     };
     this.jdbcTemplate.execute(SQL, cas);
     return listaresu;
    } 
    
    public List getSaldosPorDia(final String cliente,final String sucursal, 
                                      final String cuenta,final String boveda, 
                                      final String fechadesde,final String fechahasta) throws SQLException{
                                      
                                      
            logger.info("Obteniendo lista de saldos por dia");
            String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_SLDO_DIAS(?,?,?,?,? ,?,?,?,? ) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
            final List listSaldPorDia = new ArrayList();            
            CallableStatementCallback cs = new CallableStatementCallback() {            
            public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
            SQLException {
                arg0.setString("P_COD_CLIE", cliente);
                arg0.setString("P_COD_SUCU_HTB", sucursal);
                arg0.setString("P_LIST_COD_CNTA", cuenta);
                arg0.setString("P_LIST_COD_BOVE", boveda);
                arg0.setString("P_FEC_DSDE", fechadesde);
                arg0.setString("P_FEC_HSTA", fechahasta);
                arg0.registerOutParameter("S_LIST", OracleTypes.CURSOR);
                arg0.registerOutParameter("S_ERRO", OracleTypes.NUMERIC);            
                arg0.registerOutParameter("S_MENS", OracleTypes.VARCHAR);
                arg0.execute();
                //logger.info(arg0.getString("S_QUERY"));
                logger.info(arg0.getString("S_MENS"));
                if(arg0.getInt("S_ERRO") == ConstantesHermetic.RESULT_SP_OK)
                    {
                    ResultSet rs = (ResultSet)arg0.getObject("S_LIST");
                    while(rs.next()){
                            CuentaClienteBean cuentaClienteBean = new CuentaClienteBean();
                            cuentaClienteBean.setFechaProcesoApertura(rs.getString("fec_proc_aper"));
                            cuentaClienteBean.setMontoEfectivo(Util.getDoubleFormatted(rs.getDouble("monto")));
                            cuentaClienteBean.setDescCuenta(rs.getString("des_cnta"));
                            cuentaClienteBean.setDescBoveda(rs.getString("des_bove"));
                            listSaldPorDia.add(cuentaClienteBean);
                        }
                        return listSaldPorDia;
                    }
                else{
                    throw new SQLException("Ocurrio un error al obtener la lista");
                }
            }
            };
            this.jdbcTemplate.execute(SQL, cs);
            return listSaldPorDia;
            }
            
    public List getDetalleRecojoMultiple(final String fechaDesde, final String fechaHasta, 
                                        final String cliente, final String listCodMatriz,final String listCodPunto, 
                                        final String sucursal) {
          logger.info("Obtener lista de detalle de recojo");
          String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_DETA_RECO_MULT(?,?,?,?,?, ?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(   ),new Exception().getStackTrace()[0].getMethodName(),SQL);
          final List listarecojo = new ArrayList();
          CallableStatementCallback cas = new CallableStatementCallback() {
          public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
          SQLException {
              arg0.setString(1, cliente);
              arg0.setString(2, sucursal);
              arg0.setString(3, fechaDesde);
              arg0.setString(4, fechaHasta);
              arg0.setString(5, listCodMatriz);
              arg0.setString(6, listCodPunto);
              arg0.registerOutParameter(7, OracleTypes.CURSOR);
              arg0.registerOutParameter(8, OracleTypes.NUMERIC);            
              arg0.registerOutParameter(9, OracleTypes.VARCHAR);
              arg0.registerOutParameter(10, OracleTypes.VARCHAR);
              arg0.execute();
              logger.info(arg0.getString(9));
              ResultSet rs = (ResultSet)arg0.getObject(7);
              while(rs.next()){
                   ComprobanteServicioBean cs = new ComprobanteServicioBean();
                   cs.setDesPunto(rs.getString("punto"));
                   cs.setCodPunto(rs.getString("codPunto")==null?"":rs.getString("codPunto"));
                   cs.setDesBancPunto(rs.getString("desBancPunto")==null?"":rs.getString("desBancPunto"));
                   cs.setDesHTBPunto(rs.getString("desHTBPunto")==null?"":rs.getString("desHTBPunto"));
                   cs.setFecha(rs.getString("fecha_atencion"));                   
                   cs.setSerie(rs.getString("cod_seri_cmpb"));
                   cs.setNumero(rs.getString("cs"));
                   String ini = "";
                   ini = rs.getString("inicio_prog");
                   if (ini != null)
                       cs.setInicioProg(ini);
                   else
                       cs.setInicioProg("");
                   String fin = "";
                   fin = rs.getString("final_prog");
                   if (fin != null)
                       cs.setFinProg(fin);
                   else
                       cs.setFinProg("");
                   cs.setHoraInicio(rs.getString("hora_lleg"));
                   cs.setHoraFin(rs.getString("hora_sali"));
                   cs.setCodMatriz(rs.getString("codMatriz")==null?"":rs.getString("codMatriz"));
                   cs.setDesMatriz(rs.getString("desMatriz")==null?"":rs.getString("desMatriz"));
                   cs.setDesBancMatriz(rs.getString("desBancMatriz")==null?"":rs.getString("desBancMatriz"));
                   cs.setDesHTBMatriz(rs.getString("desHTBMatriz")==null?"":rs.getString("desHTBMatriz"));
                   listarecojo.add(cs);                               
               }
               return listarecojo;
          }
       };
       this.jdbcTemplate.execute(SQL, cas);
       return listarecojo;
     }             
        
     
        
    public List getDetalleAperturaSobre(final String cliente, 
                                        final String sucursal,
                                        final String cuenta, 
                                        final String modulo, 
                                        final String serie, 
                                        final String numero,                                        
                                        final String fechaDesde, 
                                        final String fechaHasta, 
                                        final String chkAnom,
                                        final String listCodPunto) {
          logger.info("Obtener lista de detalle de apertura por sobre");
          String SQL = "{ call APERTURA.HWPG_COMP_SERV.HWPR_LIST_DETA_APER_SOBR_MULT(?,?,?,?,?, ?,?,?,?,?, ?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
          final List listarecojo = new ArrayList();
          CallableStatementCallback cas = new CallableStatementCallback() {
          public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
          SQLException {
              arg0.setString(1, cliente);
              arg0.setString(2, sucursal);
              arg0.setString(3, cuenta);
              arg0.setString(4, modulo);
              arg0.setString(5, serie);
              arg0.setString(6, numero);
              arg0.setString(7, fechaDesde);
              arg0.setString(8, fechaHasta);
              arg0.setString(9, chkAnom);
              arg0.setString(10, listCodPunto);
              arg0.registerOutParameter(11, OracleTypes.CURSOR);
              arg0.registerOutParameter(12, OracleTypes.NUMERIC);            
              arg0.registerOutParameter(13, OracleTypes.VARCHAR);
              arg0.registerOutParameter(14, OracleTypes.VARCHAR);
              arg0.execute();
              logger.info(arg0.getString(13));
              ResultSet rs = (ResultSet)arg0.getObject(11);
              while(rs.next()){
                   ComprobanteServicioBean cs = new ComprobanteServicioBean();
                   cs.setDesPunto(rs.getString("des_punt"));
                   cs.setFecha(rs.getString("fec_proc_aper"));                   
                   cs.setSerie(rs.getString("cod_seri_cmpb"));
                   cs.setNumero(rs.getString("num_cmpb"));
                   cs.setTipoUnidad(rs.getString("tip_unid_mone"));                   
                   cs.setMontDiceContTotal(rs.getDouble("mon_dice_cont_tot"));
                   cs.setMontContieneTotal(rs.getDouble("mon_cont_tot"));
                   cs.setMontDiceCont(rs.getDouble("mon_dice_cont_parc"));
                   cs.setMontContiene(rs.getDouble("mon_cont_parc"));
                   cs.setMontAnomalia(rs.getDouble("mon_anom"));
                   cs.setSobres(rs.getDouble("can_sobr"));
                   cs.setDesTipo(rs.getString("des_tipo"));                   
                   cs.setNumActa(rs.getString("num_acta"));
                   cs.setSerieActa(rs.getString("cod_seri_acta"));
                   cs.setTipoDocuActa(rs.getString("tip_docu_acta"));
                   cs.setTxtObserv(rs.getString("txt_obsv"));
                   cs.setResponsable(rs.getString("des_resp"));
                   cs.setSecSobre(rs.getString("nse_secu"));
                   cs.setTipoDato(rs.getString("tip_dato"));
                   cs.setCodBove(rs.getString("cod_bove"));
                   listarecojo.add(cs);                               
               }
               return listarecojo;
          }
       };
       this.jdbcTemplate.execute(SQL, cas);
       return listarecojo;
     }           
            
    public List getListBillRecoIngr(String codClie,String codSucuHtb,String listCnta,String listBove,String listPtos,String listMatrices,String listDenos ,String tipOrig,String tipPuntOrig,String tipCS,String fecProcAperDesde,String fecProcAperHsta){
        List listBillRecoIngr = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        try{
            map.put("P_COD_CLIE",codClie);
            map.put("P_COD_SUCU_HTB",codSucuHtb);
            map.put("P_LIST_CNTA",listCnta);
            map.put("P_LIST_BOVE",listBove);
            map.put("P_LIST_PUNT",listPtos);
            map.put("P_LIST_MATRICES",listMatrices);
            map.put("P_LIST_DENO",listDenos);
            map.put("P_TIP_ORIG",tipOrig);
            map.put("P_TIP_PUNT_ORIG",tipPuntOrig);
            map.put("P_TIP_CS",tipCS);
            map.put("P_FEC_PROC_APER_DSDE",fecProcAperDesde);
            map.put("P_FEC_PROC_APER_HSTA",fecProcAperHsta);
            sqlMapClient.queryForObject("getListBillRecoIngr",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro==0)
                listBillRecoIngr = (List)map.get("S_LIST");
            else
                throw new Error(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
            listBillRecoIngr = new ArrayList();
        }
        return listBillRecoIngr;
    }
    public List getListBillRecoEnvi(String codClie,String codSucuHtb,String listCnta,String listBove,String listPtos,String listMatrices,String listDenos, String tipOrig,String tipPuntOrig,String tipCS,String fecProcAperDesde,String fecProcAperHsta){
        List listBillRecoIngr = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        try{
            map.put("P_COD_CLIE",codClie);
            map.put("P_COD_SUCU_HTB",codSucuHtb);
            map.put("P_LIST_CNTA",listCnta);
            map.put("P_LIST_BOVE",listBove);
            map.put("P_LIST_PUNT",listPtos);
            map.put("P_LIST_MATRICES",listMatrices);
            map.put("P_LIST_DENO",listDenos);
            map.put("P_TIP_ORIG",tipOrig);
            map.put("P_TIP_PUNT_ORIG",tipPuntOrig);
            map.put("P_TIP_CS",tipCS);
            map.put("P_FEC_PROC_APER_DSDE",fecProcAperDesde);
            map.put("P_FEC_PROC_APER_HSTA",fecProcAperHsta);
            sqlMapClient.queryForObject("getListBillRecoEnvi",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro==0)
                listBillRecoIngr = (List)map.get("S_LIST");
            else
                throw new Error(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
            listBillRecoIngr = new ArrayList();
        }
        return listBillRecoIngr;
    }
    
    /**Nuevos metodos  REQ1487- CU021- J.Rivera 09/05/2011***/
     public List getListIngSalApoyoFinanciero  (String sucursales, String cliente, 
                                                String cuentas, String tipoUnidMone, 
                                                String bovedas, String fechaDesde,
                                                String fechaHasta,String indTipo,String listaBancos,String tipClie,String tipoOper) 
                                                throws Exception{

         List listIngSalApoyFinan = new ArrayList();
         Map map = new HashMap();
         int erro = 0;
         map.put("P_COD_SUCU",sucursales);
         map.put("P_COD_CLIE",cliente);
         map.put("P_COD_CNTA",cuentas);
         map.put("P_TIP_UNID_MONE",tipoUnidMone);
         map.put("P_COD_BOVE",bovedas);
         map.put("P_FEC_DESD",fechaDesde);
         map.put("P_FEC_HAST",fechaHasta);
         map.put("P_IND_TIPO",indTipo);
         map.put("P_LIST_CLIE_BANC",listaBancos);
         map.put("P_TIP_CLIE",tipClie);
         map.put("P_COD_TIPO_OPER",tipoOper);
         
         try{
                sqlMapClient.queryForObject("getListIngSalApoyFinan",map);
                erro = (Integer)map.get("S_ERRO");
                if(erro==0)
                    listIngSalApoyFinan = (List)map.get("S_LIST");
                else
                    throw new Error(map.get("S_MENS").toString());
            }catch(Exception e){
                logger.error("Error en Reporte de Ing/Sal Apoyo Financieros",e);
                listIngSalApoyFinan = new ArrayList();
         } 
         return listIngSalApoyFinan;
     }
     
    public double getSaldoInicialApoyoFinanciero(String sucursal, 
                                                 String cliente, String cuenta, 
                                                 String tipoUnidMone, 
                                                 String bovedas, 
                                                 String fechaDesde, 
                                                 String indTipo)throws Exception {
        List listIngSalApoyFinan = new ArrayList();
        Map map = new HashMap();
        double saldo = 0;
        map.put("P_COD_SUCU",sucursal);
        map.put("P_COD_CLIE",cliente);
        map.put("P_COD_CNTA",cuenta);
        map.put("P_TIP_UNID_MONE",tipoUnidMone);
        map.put("P_COD_BOVE",bovedas);
        map.put("P_FEC_DESD",fechaDesde);
        map.put("P_IND_TIPO",indTipo);
        
        try{
               sqlMapClient.queryForObject("getSaldoInicApoyFinan",map);
               String ssaldo=String.valueOf(map.get("S_SALD"));
               if (ssaldo!=null && !ssaldo.equals("")) 
                saldo= Double.parseDouble(ssaldo);
           }catch(Exception e){
               logger.error("Error funcion para obtener saldos iniciales de Apoyo Financiero",e);
               listIngSalApoyFinan = new ArrayList();
        } 
        return saldo;
    }
    
    public List validarCntasApoyoFinan(String cuentas, String cliente, 
                                       String sucursal) {
        
        List listCuentasValidadas = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_CNTA",cuentas);
        map.put("P_COD_CLIE",cliente);
        map.put("P_COD_SUCU",sucursal);
        
        try{
               sqlMapClient.queryForObject("validarCntasApoyoFinan",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   listCuentasValidadas = (List)map.get("S_LIST");
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error en validacion de Cuentas para Apoyo Financiero",e);
               listCuentasValidadas = new ArrayList();
        } 
        return listCuentasValidadas;
            
    }
    
    public List getRepoHistoCabecera(String codCliente, String codSucursal, 
                                     String codCuenta, String tipoUnidMone, 
                                     String fechaProc, String codBove) {
        List listCabeceraRepo = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_CLIE",codCliente);
        map.put("P_COD_SUCU",codSucursal);
        map.put("P_COD_CNTA",codCuenta);
        map.put("P_TIP_UNID_MONE",tipoUnidMone);
        map.put("P_FEC_PROC",fechaProc);
        map.put("P_COD_BOVE",codBove);
        
        try{
               sqlMapClient.queryForObject("getRepoHistoCabecera",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   listCabeceraRepo = (List)map.get("S_LIST");
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error en lista cabecera para reporte historico",e);
               listCabeceraRepo = new ArrayList();
        } 
        return listCabeceraRepo;
    }

    public List getRepoHistoDetalle(String id,
                                    String codRepo) {
        List listDetalleRepo = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        map.put("P_ID",id);
        map.put("P_COD_REPO",codRepo);
        
        try{
               sqlMapClient.queryForObject("getRepoHistoDetalle",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   listDetalleRepo = (List)map.get("S_LIST");
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error en lista detalle para reporte historico",e);
               listDetalleRepo = new ArrayList();
        } 
        return listDetalleRepo;
    }

    public List getRepoHistoResumen(String id, 
                                    String codRepo) {
        List listResumenRepo = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        map.put("P_ID",id);
        map.put("P_COD_REPO",codRepo);
        
        try{
               sqlMapClient.queryForObject("getRepoHistoResumen",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   listResumenRepo = (List)map.get("S_LIST");
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error en lista cabecera para reporte historico",e);
               listResumenRepo = new ArrayList();
        } 
        return listResumenRepo;
    }
    

    public List getActaAnomalia(String serie, String tipo, String cmpb) {
        
        List listActa = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SERI_CMPB",serie);
        map.put("P_TIP_DOCU_CMPB",tipo);
        map.put("P_NUM_CMPB",cmpb);
        
        try{
               sqlMapClient.queryForObject("getActaAnomalia",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   listActa = (List)map.get("S_LIST");
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error en la obtencion del acta de anomalia",e);
               listActa = new ArrayList();
        } 
        return listActa;
            
    }

    public String getDesNotaActa(String tipoActa, String nseSecu, String codSecc, String nsePosi){
    
        String desNota = null;
        Map map = new HashMap();
        int erro = 0;
        map.put("P_TIP_DOCU", tipoActa);
        map.put("P_NSE_SECU", nseSecu);
        map.put("P_COD_SECC", codSecc);
        map.put("P_NSE_POSI", nsePosi);
        
        try{
               sqlMapClient.queryForObject("getDesNotaActa",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   desNota = (String)map.get("S_DES_NOTA");
               else{
                   //throw new Error(map.get("S_MENS").toString());
                    logger.info(map.get("S_MENS").toString());
                   desNota = "";
               }
           }catch(Exception e){
               logger.error("Error en la obtencion de la descripcion de la Nota de anomalia",e);               
        } 
        return desNota;    
    }
    
    public String getDesTipoActa(String codGrupTipo, String codClasActa){
        
        String desTipoActa = null;
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_GRUP_TIPO", codGrupTipo);
        map.put("P_COD_CLAS_TIPO", codClasActa);
        
        try{
               sqlMapClient.queryForObject("getDesTipoActa",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   desTipoActa = (String)map.get("S_DES_TIPO");
               else{
                   //throw new Error(map.get("S_MENS").toString());
                   logger.info(map.get("S_MENS").toString());
                   desTipoActa = "";
               }    
           }catch(Exception e){
               logger.error("Error en la obtencion del tipo de Acta de anomalia",e);               
        } 
        return desTipoActa;                    
        
    }
    
    public String getFechaProcesoActa(String serieActa, String tipoDocuActa, String numActa, String fechaProc){

        String fechaProceso = null;
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SERI_ACTA", serieActa);
        map.put("P_TIP_DOCU_ACTA", tipoDocuActa);
        map.put("P_NUM_ACTA", numActa);
        map.put("P_FECH_PROC", fechaProc);
        
        try{
               sqlMapClient.queryForObject("getFechaProcesoActa",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   fechaProceso = (String)map.get("S_FECH_PROC");
               else{
                   //throw new Error(map.get("S_MENS").toString());
                   logger.info(map.get("S_MENS").toString());
                   fechaProceso = "";                   
               }
           }catch(Exception e){
               logger.error("Error en la obtencion de la fecha de operacion",e);               
        } 
        return fechaProceso;                    
    
    }    
    
    public String getRemitenteActa(String serieActa, String tipoDocuActa, String numActa, String puntoOrigen, String nomClie){    

            String nombreRemitente = null;
            Map map = new HashMap();
            int erro = 0;
            map.put("P_COD_SERI_ACTA", serieActa);
            map.put("P_TIP_DOCU_ACTA", tipoDocuActa);
            map.put("P_NUM_ACTA", numActa);
            map.put("P_PUNT_ORIG", puntoOrigen);
            map.put("P_NOM_CLIE", nomClie);
            
            try{
                   sqlMapClient.queryForObject("getRemitenteActa",map);
                   erro = (Integer)map.get("S_ERRO");
                   if(erro==0)
                       nombreRemitente = (String)map.get("S_NOM_REMI");
                   else{
                       //throw new Error(map.get("S_MENS").toString());
                        logger.info(map.get("S_MENS").toString());
                        nombreRemitente = "";  
                    }
               }catch(Exception e){
                   logger.error("Error en la obtencion del remitente del acta",e);               
            } 
            return nombreRemitente;                    
        
        }        
        
    public String getNumUnicActaImp(String serieActa, String tipoDocuActa, String numActa, String codEmplImp, String codClasActa){
    
        String numUnicActa = null;
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SERI_ACTA", serieActa);
        map.put("P_TIP_DOCU_ACTA", tipoDocuActa);
        map.put("P_NUM_ACTA", numActa);
        map.put("P_COD_EMPL_IMPR", codEmplImp);
        map.put("P_COD_CLAS_ACTA", codClasActa);
        
        try{
               sqlMapClient.queryForObject("getNumUnicActaImp",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   numUnicActa = (String)map.get("P_NUME_UNIC");
               else{
                   logger.info(map.get("S_MENS").toString());
                   throw new Error(map.get("S_MENS").toString());
               }
           }catch(Exception e){
               logger.error("Error en la obtencion del numero unico de impresion de acta",e);               
        } 
        return numUnicActa;                    
    
    }    
    
    public List  getActaImpr(String serieActa, String tipoDocuActa, String numActa, String numUnicActa){
 
        List listActa = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SERI_ACTA",serieActa);
        map.put("P_TIP_DOCU_ACTA",tipoDocuActa);
        map.put("P_NUM_ACTA",numActa);
        map.put("P_COD_NUME_UNIC",numUnicActa);
        
        try{
               sqlMapClient.queryForObject("getActaImpr",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   listActa = (List)map.get("S_LIST");
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error en la obtencion de la lista de acta de anomalia",e);
               listActa = new ArrayList();
        } 
        return listActa;
        
    }
    
    public String getObsvActa(String codAnom, String tipoAnom, String txtObsv, String numBill){
    
        String observacionActa = "";
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_ANOM", codAnom);
        map.put("P_TIP_ANOM", tipoAnom);
        map.put("P_TXT_OBSV", txtObsv);
        map.put("P_NUM_BILL", numBill);
        
        try{
               sqlMapClient.queryForObject("getObsvActa",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   observacionActa = (String)map.get("S_OBSV_ACTA");
               else
                   //throw new Error(map.get("S_MENS").toString());
                   observacionActa = "";
                   logger.info(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error en la obtencion de la observacion de acta",e);               
        } 
        return observacionActa;      
    
    }
    
    public String getDiferenciaActa(String serieActa, String tipoDocuActa, String numActa, String codBove, String difeActa ){
        
        String diferenciaActa = "0";
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SERI_ACTA", serieActa);
        map.put("P_TIP_DOCU_ACTA", tipoDocuActa);
        map.put("P_NUM_ACTA", numActa);
        map.put("P_COD_BOVE", codBove);
        map.put("P_DIFE_ACTA", difeActa);
        
        try{
               sqlMapClient.queryForObject("getDiferenciaActa",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   diferenciaActa = (String)map.get("S_MON_DIFE");
               else{
                   //throw new Error(map.get("S_MENS").toString());
                   diferenciaActa = "0";
                   logger.info(map.get("S_MENS").toString());
               }
           }catch(Exception e){
               logger.error("Error en la obtencion de la diferrencia de acta",e);               
        } 
        return diferenciaActa;          
        
    }



    public String eliminaActaTemp(String numUnicActa){
        String nombreRemitente = null;
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_NUME_UNIC", numUnicActa);
        
        try{
               sqlMapClient.queryForObject("eliminaActaTemp",map);
               erro = (Integer)map.get("S_ERRO");
           }catch(Exception e){
               logger.error("Error en la eliminacion del acta temporal",e);               
        } 
        return String.valueOf(erro);  
    }
    
    public String getDescClase(String codClasActa){
        String descClase = "";
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_CLAS_TIPO", codClasActa);
        try{
               sqlMapClient.queryForObject("getDescClase",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   descClase = (String)map.get("S_DESC_CLAS");
               else
                   //throw new Error(map.get("S_MENS").toString());
                   logger.error("No se encontro la descripcion de la clase");               
                   
           }catch(Exception e){
               logger.error("Error en la obtencion de la descripcion de la Clase de acta",e);               
        } 
        return descClase;  
    }
    
    public String getSeriales(String serieActa, String tipoDocuActa, String numActa){
        String seriales = "";
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SERI_ACTA", serieActa);
        map.put("P_TIP_DOCU_ACTA", tipoDocuActa);
        map.put("P_NUM_ACTA", numActa);        
        try{
               sqlMapClient.queryForObject("getSeriales",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   seriales = (String)map.get("S_DESC_SERI");
               else
                   //throw new Error(map.get("S_MENS").toString());
                   logger.error("No se encontro la descripcion de seriales");               
           }catch(Exception e){
               logger.error("Error en la obtencion de Seriales de acta",e);               
        } 
        return seriales;  
    }
    
    public String getNombreFirma(String codEmplImp){
        String nombreFirma = " ";
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_EMPL_IMPR", codEmplImp);
        
        try{
               sqlMapClient.queryForObject("getNombreFirma",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   nombreFirma = (String)map.get("S_NOMB_FIRM");
               else
                   //throw new Error(map.get("S_MENS").toString());
                   logger.error("No se encontro el nombre de firma");               
           }catch(Exception e){
               logger.error("Error en la obtencion del nombre de Firma ",e);               
        } 
        return nombreFirma;  
    }
    
    public List getListMovDiarioAgen(String codSucu,String codClie,String codCnta,String codBove,
                                     String fechaDesde,String fechaHasta){
        
        List listMovDiarioAgen = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SUCU",codSucu);
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_CNTA",codCnta);
        map.put("P_COD_BOVE",codBove);
        map.put("P_FEC_DESD",fechaDesde);
        map.put("P_FEC_HAST",fechaHasta);
        
        try{
               sqlMapClient.queryForObject("getListMovDiarioAgen",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   listMovDiarioAgen = (List)map.get("S_LIST");
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error reporte en Movimiento Diario",e);
               listMovDiarioAgen = new ArrayList();
        } 
        return listMovDiarioAgen;                                     
    }
    
    public List getListMovDiarioClie(String codSucu,String codClie,String codCnta,String codBove,
                                     String fechaDesde,String fechaHasta){
                                       
        List listMovDiarioClie= new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SUCU",codSucu);
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_CNTA",codCnta);
        map.put("P_COD_BOVE",codBove);
        map.put("P_FEC_DESD",fechaDesde);
        map.put("P_FEC_HAST",fechaHasta);
        
        try{
               sqlMapClient.queryForObject("getListMovDiarioClie",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   listMovDiarioClie = (List)map.get("S_LIST");
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error reporte Movimiento Diario",e);
               listMovDiarioClie = new ArrayList();
        } 
        return listMovDiarioClie;
    }
    
    public List getResuMovDiario(String codSucu,String codClie,String codCnta,String codBove,String fechaDesde,String fechaHasta){
        List listResuMovDiario= new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SUCU",codSucu);
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_CNTA",codCnta);
        map.put("P_COD_BOVE",codBove);
        map.put("P_FEC_DESD",fechaDesde);
        map.put("P_FEC_HAST",fechaHasta);
        
        try{
               sqlMapClient.queryForObject("getResuMovDiario",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0)
                   listResuMovDiario = (List)map.get("S_LIST");
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error reporte Movimiento Diario",e);
               listResuMovDiario = new ArrayList();
        } 
        return listResuMovDiario;
    }
    
    public String getSaldoTotalMultiSucuMap(String codClie,String codSucu,String codCnta,String codBove,String fecProcAper,int pInfo){
    
        Map map = new HashMap();
        String monto="";
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_SUCU_HTB",codSucu);
        map.put("P_COD_CNTA",codCnta);
        map.put("P_COD_BOVE",codBove);
        map.put("P_FEC_PROC_APER",fecProcAper);
        map.put("P_TIP_INFO",pInfo);
        
        try{
               sqlMapClient.queryForObject("getSaldoTotalMultiSucu",map);
               monto = String.valueOf(map.get("S_MONT"));
           }catch(Exception e){
               logger.error("Error reporte Movimiento Diario",e);
        } 
        return monto;
    }
        
    /*JRA REQ1659*/
    public ReporteMovDiarioBean getCalcContemRepoDiar(String codSucu,String codClie,String codCnta,String codBove,String fechaDesde,String fechaHasta){
        Double depositoCliente=new Double(0);
        Double actasAnomalia=new Double(0);
        Double contemporanea=new Double(0);
        ReporteMovDiarioBean repoMovDiario=new ReporteMovDiarioBean();
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_SUCU",codSucu);
        map.put("P_COD_CNTA",codCnta);
        map.put("P_COD_BOVE",codBove);
        map.put("P_FEC_DESD",fechaDesde);
        map.put("P_FEC_HAST",fechaHasta);
        
        try{
               sqlMapClient.queryForObject("getCalcContemRepoDiar",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0){
                   depositoCliente = (Double)map.get("S_DEPO");
                   actasAnomalia   = (Double)map.get("S_ACTA");
                   contemporanea   = (Double)map.get("S_CONT");
                   repoMovDiario.setMontoDepositos(depositoCliente);
                   repoMovDiario.setMontoActas(actasAnomalia);
                   repoMovDiario.setMontoContemporanea(contemporanea);
               }
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error calculo Contemporanea del Reporte de Movimiento Diario",e);
        } 
        return repoMovDiario;
    }
    /*FIN JRA REQ1659*/
        
    /*INICIO JRA- Reporte de Montos en Custodia**/    
    public List<RepoMontosCustodiaBean> getSaldosMontoCustodia(String codSucuHtb,String codClie,String codCnta,String codBove,String tipOper,String fecDesd,String fecHast){
      
      Map map = new HashMap();
      int erro = 0;
      map.put("P_COD_SUCU",codSucuHtb);
      map.put("P_COD_CLIE",codClie);
      map.put("P_COD_CNTA",codCnta);
      map.put("P_COD_BOVE",codBove);
      map.put("P_TIP_OPER",tipOper);
      map.put("P_FEC_DESD",fecDesd);
      map.put("P_FEC_HAST",fecHast);
      List<RepoMontosCustodiaBean> listaMontosCustodia=new ArrayList<RepoMontosCustodiaBean>();
      
      try{
             sqlMapClient.queryForObject("getSaldosMontoCustodia",map);
             erro = (Integer)map.get("S_ERRO");
             if(erro==0){
                 listaMontosCustodia=(List<RepoMontosCustodiaBean>) map.get("S_LIST");
             }
             else
                 throw new Error(map.get("S_MENS").toString());
         }catch(Exception e){
             logger.error("Error calculo de saldos para Reporte de Custodia",e);
      } 
      return listaMontosCustodia;            
    }
    
    public List<RepoMontosCustodiaBean> getSalidasMontoCustodia(String codSucuHtb,String codClie,String codCnta,String codBove,String tipOper,String fecDesd,String fecHast){
      
      Map map = new HashMap();
      int erro = 0;
      map.put("P_COD_SUCU",codSucuHtb);
      map.put("P_COD_CLIE",codClie);
      map.put("P_COD_CNTA",codCnta);
      map.put("P_COD_BOVE",codBove);
      map.put("P_TIP_OPER",tipOper);
      map.put("P_FEC_DESD",fecDesd);
      map.put("P_FEC_HAST",fecHast);
      List<RepoMontosCustodiaBean> listaMontosCustodia=new ArrayList<RepoMontosCustodiaBean>();
      
      try{
             sqlMapClient.queryForObject("getSalidasMontoCustodia",map);
             erro = (Integer)map.get("S_ERRO");
             if(erro==0){
                 listaMontosCustodia=(List<RepoMontosCustodiaBean>) map.get("S_LIST");
             }
             else
                 throw new Error(map.get("S_MENS").toString());
         }catch(Exception e){
             logger.error("Error calculo de salidas para Reporte de Custodia",e);
      } 
      return listaMontosCustodia;            
    }
    
    public List<RepoMontosCustodiaBean> getTotalesMontoCustodia(String codSucuHtb,String codClie,String codCnta,String codBove,String tipOper,String fecDesd,String fecHast){
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SUCU",codSucuHtb);
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_CNTA",codCnta);
        map.put("P_COD_BOVE",codBove);
        map.put("P_TIP_OPER",tipOper);
        map.put("P_FEC_DESD",fecDesd);
        map.put("P_FEC_HAST",fecHast);
        List<RepoMontosCustodiaBean> listaMontosCustodia=new ArrayList<RepoMontosCustodiaBean>();
        
        try{
               sqlMapClient.queryForObject("getTotalesMontoCustodia",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0){
                   listaMontosCustodia=(List<RepoMontosCustodiaBean>) map.get("S_LIST");
               }
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error calculo de totales para Reporte de Custodia",e);
        } 
        return listaMontosCustodia; 
    }
   
    public List<RepoMontosCustodiaBean> getListaSalidasCustodia(String codSucuHtb,String codClie,String codCnta,String fecDesd){
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SUCU",codSucuHtb);
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_CNTA",codCnta);
        map.put("P_FEC_DESD",fecDesd);
        List<RepoMontosCustodiaBean> listaMontosCustodia=new ArrayList<RepoMontosCustodiaBean>();
        
        try{
               sqlMapClient.queryForObject("getListaSalidasCustodia",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0){
                   listaMontosCustodia=(List<RepoMontosCustodiaBean>) map.get("S_LIST");
               }
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error calculo de salidas para Reporte de Custodia",e);
        } 
        return listaMontosCustodia; 
    }
    
    public List<RepoMontosCustodiaBean> getListaSalidasCustodiaCons(String codSucuHtb,String codClie,String codCnta,String fecDesd){
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_SUCU",codSucuHtb);
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_CNTA",codCnta);
        map.put("P_FEC_DESD",fecDesd);
        List<RepoMontosCustodiaBean> listaMontosCustodia=new ArrayList<RepoMontosCustodiaBean>();
        
        try{
               sqlMapClient.queryForObject("getListaSalidasCustodiaCons",map);
               erro = (Integer)map.get("S_ERRO");
               if(erro==0){
                   listaMontosCustodia=(List<RepoMontosCustodiaBean>) map.get("S_LIST");
               }
               else
                   throw new Error(map.get("S_MENS").toString());
           }catch(Exception e){
               logger.error("Error calculo de salidas consolidadas para Reporte de Custodia",e);
        } 
        return listaMontosCustodia; 
    }
    
    public Double getTipoCambioSolDol(String fechaDesde,String tipoCambio){
      Map map = new HashMap();
      int erro = 0;
      map.put("P_FEC_DESD",fechaDesde);
      map.put("P_TIP_CAMB",tipoCambio);
      Double montoTipoCambio=new Double(0);
      
      try{
             sqlMapClient.queryForObject("getTipoCambioSolDol",map);
             montoTipoCambio = (Double)map.get("S_TIP_CAMB");
             
         }catch(Exception e){
             logger.error("Error al obtener el tipo de cambio soles a dolares",e);
      } 
      return montoTipoCambio; 
    }
     
    /*FIN JRA- Reporte de Montos en Custodia**/    
  
    public List<OperRealBean> getListOperRealizadas(String  sucursales, int cliente,String fechaDesde, String fechaHasta) throws Exception{
      List<OperRealBean> list = new ArrayList<OperRealBean>();
      Map map = new HashMap();
      map.put("P_COD_CLIE", cliente);
      map.put("P_LIST_COD_SUCU",sucursales);
      map.put("P_FEC_DESD",fechaDesde);
      map.put("P_FEC_HAST",fechaHasta);
      int erro = 0;
      try{
          sqlMapClient.queryForObject("getListOperRealizadas",map);
          erro = (Integer)map.get("S_ERRO");
          if(erro==0)
              list=(List)map.get("S_LIST");
          else
              throw new Exception(map.get("S_MENS").toString());
      }catch(Exception e){
          logger.error(e);
      }
      return list;     
    }
    
  public List<CompServAtmEntity> getListDetaRema(String  sucursales, int cliente,String fechaDesde, String fechaHasta) throws Exception{
    List<CompServAtmEntity> list = new ArrayList<CompServAtmEntity>();
    Map map = new HashMap();
    map.put("P_COD_CLIE", String.valueOf(cliente));
    map.put("P_LIST_COD_SUCU",sucursales);
    map.put("P_FEC_EMIS_INIC",fechaDesde);
    map.put("P_FEC_EMIS_FINL",fechaHasta);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getListDetaRemanente",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            list=(List)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }
    return list;     
  }
     public List<CompServAtmEntity> getListDetaMante(String  sucursales, int cliente,String fechaDesde, String fechaHasta) throws Exception{
      List<CompServAtmEntity> list = new ArrayList<CompServAtmEntity>();
      Map map = new HashMap();
      map.put("P_COD_CLIE", cliente);
      map.put("P_LIST_COD_SUCU",sucursales);
      map.put("P_FEC_DESD",fechaDesde);
      map.put("P_FEC_HAST",fechaHasta);
      int erro = 0;
      try{
          sqlMapClient.queryForObject("getListDetaMante",map);
          erro = (Integer)map.get("S_ERRO");
          if(erro==0)
              list=(List)map.get("S_LIST");
          else
              throw new Exception(map.get("S_MENS").toString());
      }catch(Exception e){
          logger.error(e);
      }
      return list;     
    }
    
    public List<OperRealResuBean> getListOperacRealizResumen(String  sucursales, String cliente,String fechaDesde, String fechaHasta, int cantFalsPrda, int cantRetrRema) throws Exception{
      List<OperRealResuBean> list = new ArrayList<OperRealResuBean>();
      Map map = new HashMap();
      map.put("P_COD_CLIE", cliente);
      map.put("P_LIST_COD_SUCU",sucursales);
      map.put("P_FEC_DESD",fechaDesde);
      map.put("P_FEC_HAST",fechaHasta);
      map.put("P_CANT_FALS_PRDA",cantFalsPrda);
      map.put("P_CANT_RETR_REMA",cantRetrRema);
      int erro = 0;
      try{
          sqlMapClient.queryForObject("getListOperacRealizResumen",map);
          erro = (Integer)map.get("S_ERRO");
          if(erro==0)
              list=(List)map.get("S_LIST");
          else
              throw new Exception(map.get("S_MENS").toString());
      }catch(Exception e){
          logger.error(e);
      }
      return list;     
    }
 
   public List<OperRealResuBean> getListAtenRemeResu(String  sucursales, String cliente,String fechaDesde, String fechaHasta) throws Exception{
    List<OperRealResuBean> list = new ArrayList<OperRealResuBean>();
    Map map = new HashMap();
    map.put("P_COD_CLIE", cliente);
    map.put("P_LIST_COD_SUCU",sucursales);
    map.put("P_FEC_DESD",fechaDesde);
    map.put("P_FEC_HAST",fechaHasta);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getListAtenRemeResu",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            list=(List)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }
    return list;     
  }
    
    public List<OperacionesAtmBean> getListOperacAtm(int cliente,int  sucursal,String fechaDesde, String fechaHasta) throws Exception{
      List<OperacionesAtmBean> list = new ArrayList<OperacionesAtmBean>();
      Map map = new HashMap();
      map.put("P_COD_CLIENTE", cliente);
      map.put("P_COD_SUCU_HTB",sucursal);
      map.put("P_FEC_EMIS_INIC",fechaDesde);
      map.put("P_FEC_EMIS_FINL",fechaHasta);
      int erro = 0;
      try{
          sqlMapClient.queryForObject("getListOperacAtm",map);
          erro = (Integer)map.get("S_ERRO");
          if(erro==0)
              list=(List<OperacionesAtmBean>)map.get("S_LIST");
          else
              throw new Exception(map.get("S_MENS").toString());
      }catch(Exception e){
          logger.error(e);
      }
      return list;     
    }
        
}
